的WebSocket?还是XMLHttpRequest?或者我必须自己做?
所以我理解客户端必须发送它,但是何时以及为什么?假设我使用XMLHttpRequest对象发送普通的HTTP GET。 我无法控制浏览器中内部tcp连接的持续时间,对吧? 如果我想使用websockets,我必须使用他们自己的websocket类,所以对于我作为用户,"升级"不可见,是吗? 只是浏览器正在做一些内部魔术来重用连接,整个升级过程对我来说与用户无关?我仍然需要使用两个不同的类,我恰好使用相同的端口,然后浏览器决定升级的性能原因。 这是真的正确吗?
答案 0 :(得分:5)
不,WebSocket客户端发送请求WebSocket连接的HTTP请求,然后服务器响应HTTP 101交换协议,这意味着它接受连接,然后客户端可以开始以二进制格式发送和接收数据。
客户请求示例:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
服务器响应示例:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
维基百科文章中详细解释了这一点:http://en.wikipedia.org/wiki/WebSocket#WebSocket_protocol_handshake
详见规范:https://tools.ietf.org/html/rfc6455#section-1.3
只是浏览器正在做一些重用的内部魔术 连接,整个升级过程对我来说与用户无关?
这是对的。
我仍然要使用两个不同的类,我恰好使用了 相同的端口和浏览器然后决定性能原因 升级。这是真的正确吗?
如果您想使用AJAX,请使用XMLHttpRequest
。如果要使用WebSocket,请使用WebSocket
类。不过,它们可以通过同一个端口访问。不同之处在于WebSocket连接将与服务器协商全双工持久二进制通道,而XMLHttpRequest
只会发出请求并获得响应。