第9章-WebSocket、Socket.IO和DerbyJS的实时应用程序-9.2.Socket.IO和Express.js

2023-05-16

大多数的实时Web应用程序中,服务器和客户端之间的通信发生在响应报文里,或者是对用户行为的响应,或者是从服务器获取数据更新的结果。

安装Socket.IO
$npm install socket.io@0.9.16 –save
这里写图片描述

package.json文件$npm install

{
  "name": "socket-express",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "express": "~4.0.0",
    "morgan": "~1.0.0",
    "cookie-parser": "~1.0.1",
    "body-parser": "~1.0.0",
    "debug": "~0.7.4",
    "jade": "~1.3.0",
    "socket.io": "0.9.16"
  }
}

在某种程度上,可以认为Socket.IO是另一个服务器,因为他处理的是socket连接,而不是标准的HTTP请求。

app.js文件
//1.导入依赖

var http = require('http');
var express = require('express');
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');

//2.导入路由规则

var routes = require('./routes/index');

//3.创建服务器对象

var app = express();

// 4.设置视图引擎

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

//5.设置中间件

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);

//6.创建Socket.IO对象并实现监听端口建立连接

var server = http.createServer(app);
var io = require('socket.io').listen(server);

//7.Socket服务器的连接建立后,添加事件监听器

messageChange
io.sockets.on('connection', function (socket) {
  socket.on('messageChange', function (data) {
    console.log(data);
    socket.emit('receive', data.message.split('').reverse().join('') );//将字符串逆序
  });
});

//8.监听端口启动服务器

app.set('port', process.env.PORT || 3000);
server.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

路由文件./routes/index

var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Socket.io + Express = <3' });
});
module.exports = router;

视图文件./views/layout.jade

doctype html
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    block content

视图文件./views/index.jade

extends layout

block content
  h1= title
  p Welcome to
    span.received-message #{title}
  input(type='text', class='message', placeholder='what is on your mind?', onkeyup='send(this)')
  script(src="/socket.io/socket.io.js")
  script.
    var socket = io.connect('http://localhost');
    socket.on('receive', function (message) {
      console.log('received %s', message);
      document.querySelector('.received-message').innerText = message;
    });
    var send = function(input) {
      console.log(input.value)
      var value = input.value;
      console.log('sending %s to server', value);
      socket.emit('messageChange', {message: value});
    }

默认情况下,WebSocket连接可以使用标准端口,HTTP用80,HTTPS用443
这里写图片描述
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第9章-WebSocket、Socket.IO和DerbyJS的实时应用程序-9.2.Socket.IO和Express.js 的相关文章

  • GPS RTK测量定位原理

    转自 xff1a https baijiahao baidu com s id 61 1603136753092877848 amp wfr 61 spider amp for 61 pc 手机定位是什么原理 xff1f 实时动态工程测量是
  • STM32学习笔记 - 串口的初始设置

    STM32学习笔记 串口的初始设置 1 声明结构体变量 GPIO InitTypeDef GPIO InitStructure GPIO InitTypeDef是一个结构体变量 xff0c 包括GPIO Pin xff08 u16类型 xf
  • STL 容器区别:vector、list、deque、set、map的底层实现

    文章转自 xff1a http blog csdn net lmh12506 article details 8445025 1 set和map 比较 setmap共同点都是无序的保存元素 xff0c 只是通过它提供的借口对里面的元素进行访
  • c++程序编译过程及相关概念

    编译 把源文件中的源代码翻译成机器语言 xff0c 保存到目标文件中 如果编译通过 xff0c 就会把CPP转换成OBJ文件 编译单元 xff1a 每个cpp就是一个编译单元 xff0c 每个编译单元相互之间是独立且相互不知的 一个编译单元
  • 单片机堆栈理解

    栈Stack xff1a 存储程序中函数内部变量 xff0c 参数 xff0c 被系统直接管理 xff0c 如果函数内部参数比较多 xff0c 可加大栈容量 堆Heap xff1a 程序员主动使用 xff0c malloc函数进行申请 xf
  • 超声换能器的结构

    超声换能器是超声系统的一个重要部件 xff0c 不论是哪一种类型的超声换能器 xff0c 其基本结构都是由压电材料 电极 声匹配层 声透镜 背衬和柔性电路板等组成 声透镜 Acoustic Lens xff1a 声透镜的形状通常是凸的 xf
  • QT 开发环境 第一个安卓程序 Hello world

    参考了很多文章 xff0c 这篇文章感觉是最好 xff0c 安装文章中的版本没有问题 文章链接 xff1a Qt5 12 1 for Android配置 简书 我最后卡在生成APK的时候 xff0c 出现 androiddeployqt e
  • 51单片机串口通讯接收一串字符串

    在51单片机中 xff0c 我们使用上下位机时 xff0c 我们通常会发送一串字符串 xff0c 将它作为信号发给单片机处理 因为串口通信时 xff0c 发送信息是以一个个字符的形式发送过来的 xff0c 所以接收的就是一个个字符 xff0
  • SQL统计查询

    病人表数据 检查表数据 1 统计年龄 1 1统计病人表中一段时间范围内的年龄病人数量 xff08 仅查询数据 xff09 select f Age count from workstationdb t patient INNER JOIN
  • installsheild 2020 安装过程中自动执行exe程序

    有时根据安装包的安装情况 xff0c 会在安装开始 xff0c 或安装过程中 xff0c 或安装结束后运行指定的exe程序 1 xff09 如果是在安装结束 xff0c 即点击安装的最后一个界面的 完成 按钮 xff0c 步骤参考下图 2
  • 详解VMWARE安装WINCE6.0(1)

    通过在网上查找大量资料终天把虚拟机中运行WINCE环境搭建起来 xff0c 首先感谢网上的诸多高手 xff0c 不过网上的资料大都不是很详细 xff0c 下面我算是一个总结吧 xff0c 方便以大家后学习 1 安装工具 xff08 1 xf
  • VS2005中控件不能添加变量(add variable)解决方法总结

    有时VS2005中右击添加变量 xff08 add variable xff09 变成灰色时 xff0c 会发现不能添加变量 经过在网上搜索总结如下 1 先clean xff0c 再重新build 2 将控制的ID重新命名 xff0c 再试
  • 在VB中调用C/C++语言编写的dll,数组参数的传递

    动态链接库 xff08 dll xff09 的好处就不多说了 xff0c 这里就把如何在VB中调用VC写的dll函数的方法介绍一下 xff0c 供有需要的朋友们参考 xff0c 同时也免得自己以后忘了 初次接触DLL的用户经常会遇到一个问题
  • 将C++转换成VB,C#语言小工具介绍

    在网上看到很多网友在 NET程序中调用Win32 API xff0c 或者调用自己的VC DLL里面提供的函数的时候 xff0c 总是被生成正确的C函数在C 中的正确声明而困扰 xff0c 而生成C 43 43 中结构体在C 中的声明 天
  • malloc,free在二级指针(指针的指针)的应用

    二维指针指针应该用for循环初始化 结束用for循环逐个释放 1 初始化 xff1a int pp 61 int malloc 12 sizeof int for int i 61 0 i lt 12 i 43 43 p i 61 int
  • MFC radio button互斥选择的重要几点

    MFC中的radio控件的互斥功能很常用 xff0c 一般在MFC资源中一个一个按顺序增加radio控件时不会有问题 但如果修改以前的代码 xff0c 需要重新增加几个radion时需要注意以下几点 1 新增加的radio的ID与旧的一定要
  • CListCtrl自动排序及添加排序箭头

    应客户要求 xff0c 在点击CListCtrl列表每列标题时进行排序 xff0c 类似于WINDOWS资源管理器的效果 首先在资源中添加LVN COLUMNCLICK消息 xff0c 生成OnLvnColumnclickListInfo函
  • 从零开始学习FFT(快速傅里叶变换) 这也是我学习dft算法的心得,谢谢各位

    本文是从最基础的知识开始讲解 xff0c 力求用最通俗易懂的文字将问题将的通俗易懂 xff0c 大神勿喷 xff0c 多多指教啊 xff0c 虽然说是从零学习 FFT xff0c 但是基本的数学知识还是要有的 xff0c sin xff0c
  • ZED相机python API配置

    之前安装了ZED SDK xff0c 在官网下载了CUDA10 2版本的ZEDSDK3 8 现在用python API对ZED相机进行二次开发 由于之前安装的python版本是3 10 xff0c 运行ZED SDK中的get python
  • PCI中断处理

    首先在获得PCI配置空间资源的时候 xff0c 就要获得中断资源 xff0c 根据CM PARTIAL RESOURCE DESCRIPTOR 结构的 Type 域来区分需要获得什么样的中断资源的时候 xff0c 如果Type类型为 xff

随机推荐

  • VSCode常用快捷键

    快速复制一行 快捷键 xff1a shift 43 alt 43 下箭头 上箭头 或者 ctrl 43 c 然后 ctrl 43 v 选定多个相同的单词 快捷键 xff1a ctrl 43 d 先双击选定一个单词 xff0c 然后按下 ct
  • visca接口转RS-232C接口线序

  • Java迭代器详解,看这一篇就够了

    文章目录 x1f6a9 Java 迭代器详解 x1f4da 迭代器的定义 x1f4d2 认识Iterator 类结构图 Iterable接口 x1f58d Iterator接口 x1f4c3 Iterator接口的方法 x1f4d9 迭代器
  • 流式套接字实现简单的客户端/服务端通信过程

    一 实验内容 熟悉流式套接字socket函数的使用方法 xff0c 包括建立连接 数据发送 接收和关闭连接等 xff1b 客户端可向服务端发送任意字符串 xff0c 服务端在接收到该字 符串后 xff0c 回送给客户端 xff1b xff0
  • 实现基于 TCP/IP 协议简单的客户端、服务器通信程序实例

    本篇文章实现了一个基于TCP 的一个非常简单的客户 服务器通信程序实例 该程序中通讯协议使用的是面向连接的TCP协议SOCK STREAM 服务器的ip地址为本地地址即 xff1a 127 0 0 1 xff0c 端口号为自定义的5099
  • ARM:FreeRTOS系统栈和任务栈

    ARM xff1a FreeRTOS系统栈和任务栈 背景 xff1a ARM 有两个栈指针PSP和MSP xff0c 通过Control 寄存器来决定SP R13 使用哪个栈 我们下面谈论的系统栈和任务栈 xff0c 就和这两个栈指针有关
  • cmake编译时对‘xxxx‘未定义的引用问题

    众所周知 c c 43 43 编译过程中在链接阶段偶尔会出现 34 对 xxxx 未定义的引用 34 问题 在复杂的项目中更为常见 经查 大部分博主的关于这方面的博客千篇一律 都指出是头文件未包含的原因 我还是建议大家仔细阅读编译错误信息
  • 进制转换(C++):十六进制、二进制、十进制(附源代码)

    思路如下 xff1a 十进制转二进制 xff1a 除二求余 xff0c 得到低位到高位的二进制数字排列 十进制转八进制 xff1a 除八求余 xff0c 得到低位到高位的八进制数字排列 十进制转十六进制 xff1a 除十六取余 xff0c
  • [C/C++]C语言中math.h和cmath的pow()精度问题

    帮小朋友们DEBUG的时候 xff0c 他们有个题无论怎么提交OJ都不给过 我回来后想了想 xff0c 估计是因为math h库返回值转int时精度丢失的问题 gt 测试代码 include lt stdio h gt include lt
  • c语言自定义寄存器操作的一些方法

    1 寄存器地址的定义 xff1a define UART BASE ADRS 0x10000000 串口的基地址 define UART RHR volatile unsigned char UART BASE ADRS 43 0 数据接受
  • 数字签名-数字证书-ca认证

    数字签名是什么 xff1f 作者 xff1a 阮一峰 今天 xff0c 我读到一篇好文章 它用图片通俗易懂地解释了 xff0c 34 数字签名 34 xff08 digital signature xff09 和 34 数字证书 34 xf
  • Cocos2d-android游戏引擎-介绍

    一 游戏引擎概念 什么是游戏引擎 游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件 这些系统为游戏设计者提供各种编写游戏所需的各种工具 xff0c 其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开
  • JAVA语言的三种技术架构

    J2EE Java 2 Platform Enterprise Edition 企业版 是为开发企业环境下的应用程序提供的一套解决方案 该技术体系中包含的技术如Servlet Jsp等 xff0c 主要针对Web应用程序开发 J2SE Ja
  • java中数组排序Arrays.sort(arr)

    import java util 选择排序 class SwitchTest public static void main String args int arr 61 3 5 6 23 45 2 排序前 printArray arr 排
  • java中什么时候使用静态static,工具类的创建

    什么时候使用静态 xff1f 要从两方面下手 xff1a 因为静态修饰的内容有成员变量和函数 什么时候定义静态的变量 类变量 呢 xff1f 当对象中出现共享数据时 xff0c 该数据被静态所修饰 对象中的特有数据要定义成非静态存在于堆内存
  • java面向对象-包package-包与包之间访问-导入包import

    包 package 1 对类文件进行分类管理 2 给类提供多层命名空间 3 写在程序文件的第一行 4 类名的全称是 包名 类名 5 包也是一种封装形式 带包的java文件编译命令 编译 xff1a javac d PackageDemo j
  • String-练习3

    3 xff0c 获取一个字符串在另一个字符串中出现的次数 34 abkkcdkkefkkskk 34 思路 xff1a 1 xff0c 定义个计数器 2 xff0c 获取kk第一次出现的位置 3 xff0c 从第一次出现位置后剩余的字符串中
  • Java基础加强-java5的枚举

    枚举类 xff08 1 xff09 为什么需要枚举 xff1f 一些方法在运行时 xff0c 它需要的数据不能是任意的 xff0c 而必须是一定范围内的值 xff0c 此类问题在JDK5以前采用自定义带有枚举功能的类解决 xff0c Jav
  • Android核心基础-6.Android 耗时操作

    1 什么是ANR 在应用程序的主线程中执行一段耗时的代码 就有可能出现ANR异常 耗时的代码未执行结束时 界面会卡住 用户对界面进行了操作 10秒之后耗时代码如果还未结束 就会出现ANR异常 我们的布局文件中有个TextView和一个按钮B
  • 第9章-WebSocket、Socket.IO和DerbyJS的实时应用程序-9.2.Socket.IO和Express.js

    大多数的实时Web应用程序中 xff0c 服务器和客户端之间的通信发生在响应报文里 xff0c 或者是对用户行为的响应 xff0c 或者是从服务器获取数据更新的结果 安装Socket IO npm install socket io 64