Websockets仅在Socket.io 1.3.4中传输
Websockets transport only in Socket.io 1.3.4
当我使用Socket.io 0.9.16时,我可以设置所需的也是唯一的传输(websockets)。不,我升级到了版本1(1.3.4),无法理解如何限制传输。
看起来它启动了一个与轮询的连接,然后如果"它"愿意,升级到websocket。我希望它开始,并且总是只在websocket上工作。
所有webSocket连接都以HTTP请求开始。这就是webSocket规范的工作原理。客户端在第一个HTTP请求中请求升级到webSocket协议,如果服务器同意,则套接字将"升级"到webSockets协议。
如果服务器不支持webSocket并且不同意升级,socket.io
还会在第一个http请求中发送轮询参数,因此如果它不切换到webSocket,那么它将立即开始http轮询。
因此,简单的答案是,如果你查看网络跟踪,你可能会认为它是从http轮询开始的,但这实际上只是启动webSocket连接的http请求。这就是它应该有的样子。
如果你想了解更多关于webSocket连接是如何建立的,你可以阅读这个很好的摘要。
以下是启动webSocket连接的请求:
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
这里有一个服务器响应,同意升级到webSocket连接:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这就是webSocket协议的设计方式,使相同的网络基础设施能够同时支持HTTP连接和webSocket连接,并允许客户端查询服务器以查看其是否支持webSocket。
在成功的"升级"之后,只有webSocket协议在这个套接字上被使用。
相关文章:
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 如何使bxslider仅在移动视图中处于活动状态
- 仅在IE中,javascript中的时区名称不正确
- 单击仅在第二次单击后有效
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- 对于loop.if-仅在经过所有间隔后返回true
- 边栏仅在单击外部时关闭单击
- 如何仅在首次登录时显示弹出窗口
- 数据属性仅在切换设备模式下工作
- Javascript:JSON请求仅在第一次工作
- $(input[]).仅在firefox中出现每个抛出语法错误
- 仅在小型设备上调用jQuery函数
- 如何仅在对象URL's已下载
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- 具有大型数据集的组件仅在 IE11/Edge 上运行缓慢
- 将LocalNotifications设置为仅在清醒时启动
- Servlet仅在单击JavaScript警报消息后重定向
- JQuery-在本地工作,但未定义$,仅在部署的站点上定义
- 仅在响应视图中激发jQuery函数
- Websockets仅在Socket.io 1.3.4中传输