1. 简介
Web领域的实时推送技术,让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室、在线客服系统、评论系统等.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术
socket.io(插口)是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5,可以满足绝大部分需求。
2.安装
进入目录,在node.js环境下键入:npm install socket.io
3.例子:结合express来构建服务器
express是一个Node.js的Web应用框架,在构建HTTP服务器时经常使用到,所以直接以Socket.IO和express为例子
var express = require('express'), app = express(), server = require('http').createServer(app), io = require('socket.io').listen(server); server.listen(3000);
基本使用方法:主要分为服务器端和客户端两段代码
Server(app.js):服务器端
//接上面的代码 app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html');}); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('other event', function (data) { console.log(data); }); });
首先io.sockets.on函数接受字符串connection作为客户端发起连接的事件,当连接成功后,调用带有socket参数的回调函数.使用socket.IO的时候,基本上都在这个回调函数里面处理用户的请求
在上面的例子中,我们发送了news事件和收到了other event事件,那么客户端应该会有对应的接收和发送事件。而且客户端代码和服务器正好相反,且非常相似
socket最关键的是emit和on两个函数,
socket.emit:提交/发出一个事件(事件名称用字符串表示),事件名称可以自定义,也有一些默认的事件名称,紧接着是一个对象,表示向该socket发送的内容;
socket.on:接收一个事件(事件名称用字符串表示),紧接着是收到事件调用的回调函数,其中data是收到的数据
例如:station/index.js里 socket.emit(''+queueConfStation.sta_id, pkg); //pkg是对象 gnss/server/config/messagequeue.js里 socket.on('' + socket.handshake.query.station, function (data) { //......... }
Client(client.js):客户端
<script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('other event', { my: 'data' }); }); </script>
事件处理:上面的代码表示收到news事件后,打印收到的数据,并向服务器发送other event事件。
有两点要注意的:socket.io.js路径要写对,这个js文件实际放在了服务器端的node_modules文件夹中,在请求这个文件时会重定向,因此不要诧异服务器端不存在这个文件但为什么还能正常工作。当然,可以把服务器端的socket.io.js这个文件拷贝到本地,使它成为客户端的js文件,这样就不用每次都向Node服务器请求这个js文件,增强稳定性。第二点是要用var socket = io.connect(网站地址或ip);来获取socket对象,接着就可以使用socket来收发事件
注意:内置默认的事件名例如disconnect表示客户端连接断开,message表示收到消息等等。自定义的事件名称,尽量不要跟Socket.IO中内置的默认事件名重名,以免造成不必要的麻烦
扩展:
①为了建立一个WebSocket连接,客户端浏览器首先要向服务器发起一个HTTP请求,这个请求和通常的HTTP请求不同,包含了一些附加头信 息,其中附加头信息”Upgrade: WebSocket”表明这是一个申请协议升级的HTTP请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连 接。
②Socket.IO通过Node.js实现WebSocket服务端,同时也提供客户端JS库。Socket.IO支持以事件为基础的实时双向通讯,它可以工作在任何平台、浏览器或移动设备
③Socket.IO支持4种协议:WebSocket、htmlfile、xhr-polling、jsonp-polling,它会自动根据浏览器选择适合的通讯方式,从而让开发者可以聚焦到功能的实现而不是平台的兼容性,同时Socket.IO具有不错的稳定性和性能
相关推荐
基于nodejs-websocket模块、Socket.io库实现多人在线聊天室[丰富了上传图片,发送表情等实用聊天功能]
安装socket.io npm install socket.io 上述就是socket.io的安装步骤,但是很有可能会失败。 1.no such file or directory 解决方案:这是因为当前安装目录缺少package.json文件,初始化一下npm即可: npm init -y ...
Socket.IO 的流模块 这个库是对节点模块的更新。 没有进行代码更改,但已更新debug模块以避免现有项目中的安全漏洞。 要求 node.js 4.x 或更高版本 下载安装 npm install @sap_oss/node-socketio-stream 已知的问题...
socketio-terminal一个客户端服务器的node模块它就像SSH但通过socket.io通信
npm install socket.io 它的客户端库已经包含在“client/js/socket.io.min.js”中,但当前版本可以在安装的 socket.io 模块中找到,路径如下:“node_modules/socket.io/node_modules/socket.io-如果需要,client/...
socket.io-servicebus - 使用 Windows Azure 服务总线的 socket.io 存储 该项目提供了一个 Node.js 包,允许您使用 Windows Azure 服务总线作为 socket.io 应用程序的后端通信通道。 通过观看最近的 [订阅] ( ) 节目...
socket.io-android-chat 基于socket.io和本地node.js服务器的Android聊天应用程序如何启动node.js服务器(此项目) 1.打开cmd并转到.../socket.io-local-chat-server路径。 2.运行node index.js或nodemon index命令...
Socket.io 测试 介绍 简单的服务器包来演示在节点中测试 socket.io。 使用 Socket.io-client 连接测试套件中的多个套接字。 语言/平台/工具 节点.js 摩卡 Socket.io 指示 克隆存储库: $ git clone git@github....
安装socket.io服务器端模块: npm install socket.io 使用以下命令启动demo socket.io/web服务器 node demo-chat-server.js 导航到localhost:8090 / demo-chat-client.html进行尝试 执照 麻省理工学院
node.js-socket.io-聊天系统 使用node.js和socket.io的基于实时的聊天系统。 〜您可以在终端中使用“ npm install”命令来获取模块。
Socket.IO文件上传该模块提供了将文件从浏览器上载到运行Socket.IO的Node.JS服务器的功能。 在整个过程中,如果他们的浏览器支持WebSocket,则用户将不会提交单个HTTP请求。 支持Socket.IO 0.9及更高版本。 预期的...
sudo make install 安装socket.io 须藤 npm 安装 socket.io 下载客户端和服务器到包含node_module的文件夹(socket.io模块文件夹) 使用 sudo ln -s [nodePath/node] node 将节点链接到服务器文件夹运行节点 server
Mumble 是一个使用 Node JS、socket.io 和 Mustache 模板库构建的聊天网络应用程序。 关于 Mumble 目前具有分享您的位置、创建不同的房间和与您的朋友聊天的功能。 当前的重点是提供身份验证并使用 MongoDB 和 ...
简易插座在线控制 使用socket.io实时控制物联网设备。提供3部分物联网设备:使用ESP8266系列。... Node.js npm模块:socket.io 仪表板:简单的html 使用“ socket.io.js”库由codeisaranu和IoTtweet提供支持
RGB LED 控制与 Node.JS + socket.io + Johnny-5 + Arduino 在看过 Nodebr São Paulo 的 Meetup,更具体地说是 Paulo Pires 和 Alan 的演讲后,我决定清理我的 Arduino 并测试 Jhonny-Five,并且已经借此机会下载 ...
server端使用node的socket.io模块与客户端进行数据交互,棋子的落点和输赢校验均是在server端完成。 五子棋ui界面请见.. client端的界面这里就不做过多解释了,只要稍微懂点h5就可以自行去这里 下载源代码观看,...
使用Node.js,Socket.io,Apiai和Web语音识别api制作的Web应用程序(聊天机器人) 你需要什么 安装Node.js 节点模块的安装,例如: APIAI npm i apiai Socket.io NPM npm install socket.io dotenv npm i dotenv...
安装 node.js 和 socket.io 使用nodejs server.js运行服务器 调整以指向您的服务器 IP 笔记 现在删除了客户端代码,因此我不必维护两个单独的版本。 将来它可能会适当地模块化,我将能够重新添加核心组件。 更多...
Socket.IO-ratelimiter NPM模块可用于对socket.io事件进行限速。 不应该被视为稳定的。 有关文档,请查看
socket.io是一个JavaScript库,它允许Web客户端和服务器之间进行实时双向通信。 它由两部分组成:Node.js服务器和在浏览器中运行... 它被认为是最依赖的npm模块之一,并且可以在每个平台,浏览器或设备上使用。