Siv*_*der 4 websocket socket.io
我试图了解有关websockets协议的更多信息.根据RFC 6455,此协议的步骤是握手,它以HTTP升级请求开头:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Run Code Online (Sandbox Code Playgroud)
服务器使用HTTP Switching Protocols消息响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
Run Code Online (Sandbox Code Playgroud)
我试图使用一个基于socketIO的简单程序(nodeJS websockets库)观察到这一点.捕获流量后,我注意到客户端发送服务器的第一条消息是:
GET /socket.io/?EIO=3&transport=polling&t=1443149751115-0 HTTP/1.1
Host: localhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36
Origin: null
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Run Code Online (Sandbox Code Playgroud)
服务器响应的:
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 101
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: null
Set-Cookie: io=3Z_TCqv9LKKXcWCjAAAD
Date: Fri, 25 Sep 2015 02:55:51 GMT
Connection: keep-alive
....0{"sid":"3Z_TCqv9LKKXcWCjAAAD","upgrades": ["websocket"],"pingInterval":25000,"pingTimeout":60000}
Run Code Online (Sandbox Code Playgroud)
是SocketIO没有遵循RFC的websockets或我错过了什么?
socket.io拥有它自己的连接管理功能之前它在webSocket上连接,允许它协商它实际上要对服务器进行哪种类型的连接,并允许它向客户端发送一些配置选项.如果您正在尝试研究普通的webSocket,这会让您感到困惑.
socket.io是webSocket上的附加协议.它最终会使用下面的标准webSocket,但它会有额外的东西.如果继续遵循socket.io连接,最终会看到标准的webSocket连接.
我建议你首先从客户端创建一个简单的webSocket连接(没有socket.io)并研究该网络跟踪.