看看socket.io

第三版的Engine.io 协议

来看一下 Engine.io 会话

1 创建一个会话连接到Engine.io使用 URL

2 当连接 open 的时候,server会响应一下JSON-encoded 握手数据:

。 sid     会话ID(string)

。 upgrades    会话升级得字符串(Array of String)

。 pingTimeout     Server配置的ping超时时间

3 客户端发送ping 服务器端要发送pong 响应

4 客户端和服务器端可以随意交换消息包。

5 Polling transports 可以发送一个“close” 关闭socket。因为他总是“opening” and “closing”

URLs

一个 Engine.io url的组成:

/engine.io/[?]

1 engine.io pathName的更改取决于使用者使用的 更高级别的框架。

2  还有四个保留的query string  :

。 transport 连接协议的名称

。 j  如果transport 是 polling , JSONP响应是必须的, j 必须设置为JSONP的响应索引。

。 sid 如果客户端提供了session Id, 那么query string上就必须有

。 b64  如果不支持xhr2, b64=1 就表示server端的binary data 发送的是base64 编码的数据。

Encoding

编码的包里面包含两部分

packet

payload

Packet

这是一个UTF-8编码的string or binary data。

Stirng  <packet type id>[<data>]  example  2probe

binary data: 当我们发送二进制数据的时候 type id 要是第一个字节, 剩下是实际的内容 4|0|1|2|3|4|5

packet type id:

0 open  向服务端发送一个创建新的传输连接

1 close  关闭当前的传输协议, 但并不关闭当前的socket 连接

2 ping 发送ping 包  example 2probe

3 pong 发送pong 包 example 3probe

4 message 表示发送的是消息

example server 发送 4HelloWorld

client 接收消息并回调 socket.on(‘message‘, function(data) {console.log(data)})

5  upgrade

在服务器和客户端切换传输协议之前, 根据upgrade 发送的协议测试,如果成功就切换新传输协议

6 noop

主要使用在轮询升级到websocket时

example

1 client 创建新的连接和传输协议

2 client send 2probe

3 server send 3probe

4 client send 5

5 server 清理和关闭旧的传输协议,并切换到新的传输协议

Payload

由一组一组的<length1>:<packet1>这样的包组成, 不支持xhr2.

Transport

支持的传输协议

websocket

flashsocket

polling

jsonp

xhr

https://github.com/socketio/engine.io-protocol

时间: 2024-10-19 14:25:47

看看socket.io的相关文章

socket.io与sticky-session, 多个socket.io实例带来的问题

websocket的出现使得从服务器向浏览器推送数据更加容易.但是低版本的浏览器不支持websocket,这时socket.io出现了. 使用socket.io的应用在支持websocket的浏览器运行的时候使用websocket,而在低版本的浏览器中则使用传统的方式与服务器交互(例如long-polling及其他的方式). long-polling的应用实现方式是这样的,客户端向服务器端发起请求,服务器端不会马上返回,而是保持这个连接直到服务器需要推送信息给客户端时,才返回给客户端数据.客户端

socket.io对IE8的支持

默认下载了最新版的socket.io,版本号是1.7.2,对IE8的支持不好,反正在IE8下收发消息都不行.在网上查了很多资料,都解决不了IE8的问题,崩溃. 最后用了一个大家比较认可的版本1.0.6,可以支持IE8: 卸载socket.io npm uninstall socket.io 安装1.0.6版本的socket.io npm install [email protected] 后面的一些版本没有一一的去试,下了一个1.3.7版本的,还是可以支持收发消息的,只是发现IE8在关闭窗口时,

Socket.IO初探

建立Server //server.jsvar io = require('socket.io')(80); var chat = io .of('/chat') //设定命名空间 .on('connection', function (socket) { socket.emit('a message', { //这个只会发送给自己的socket that: 'only' , '/chat': 'will get' }); chat.emit('a message', { //全局发送 ever

【socket.io研究】0.前提准备

WebSocket出现之前,web实时推送,一般采用轮询和Comet技术(可细分为长轮询机制和流技术两种),需要大量http请求,服务器受不了.HTML5定义了WebSocket协议,基于TCP协议,由通讯协议和编程API组成,在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通讯的能力. 建立WebSocket连接的过程是浏览器首先发起一个http请求,在请求头中附带着“Upgrade: WebSocket”头信息,表名申请协议升级,服务器解析后产生应答信息,服务器与客户端的W

【socket.io研究】2.小试牛刀

1.建立个项目,也就是文件夹,这里使用testsocket 2.创建文件package.json,用于描述项目: {     "name":"testsocket",     "version":"0.0.1",     "description":"my first nodejs app",     "dependencies":{         "ex

使用Node.js的socket.io模块开发实时web程序

首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统的学习而更能理解.然后发现了Node.js中的socket.io这个模块,又觉得跟前几天用.net做客户端的socket游戏了.技术世界,兜兜转转,相逢一笑,疑是故人. socket.io用来做实时web程序,解决之前的B/S程序只有无状态连接,特定需求还需要用长连接这种“奇技淫巧”的问题.当然,这是html

node+express+socket.io制作一个聊天室功能

首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js 1 var http=require("http"); 2 var express=require("express"); 3 var sio=require("socket.io"); 4 5 var app=express(); 6 app.use(express.static(__dirname+

[Node.js] Level 6. Socket.io

6.2 Setting Up socket.io Server-Side So far we've created an Express server. Now we want to start building a real-time Q&A moderation service and we've decided to use socket.io. Using the http module, create an new http server and pass the expressapp

nodejs socket.io

今天练习使用nodejs socket.io实现聊天室功能 已经做到功能: 1.自己发送信息在聊天室里出现: 2.自己的信息显示"我:",其他人的信息显示其id: 3.进入退出聊天室会有系统提醒: 想做的功能: 1.根据id进行1对1的聊天: 2.创建组进行小范围讨论: 3.在bootstap里找个好看的prompt弹窗: 经验总结: 1.nodejs 中 express跟http的关系似乎像 jq和js一样,express可以替代http var express = require(

Socket.IO failed: Error during WebSocket handshake:

在node安装了Socket.IO,做demo时报错 WebSocket connection to 'ws://localhost:8999/socket.io/?EIO=3&transport=websocket&sid=D0fxLuPwjHWgYSI7AAAB' failed: Error during WebSocket handshake: Unexpected response code: 400 WebSocket 握手时发生错误,诡异的是我前端页面没有关闭,重启服务器nod