Blu*_*lub 2 javascript websocket
Websocket?还是XMLHttpRequest?还是我必须自己做?
所以我知道客户必须发送它,但是何时以及为什么?假设我使用XMLHttpRequest对象发送普通的HTTP GET。我无法控制浏览器中的内部tcp连接持续多长时间,对吗?而且,如果我想使用websocket,则无论如何都必须使用它们自己的websocket类,因此对于我来说,“升级”是不可见的,对吗?只是浏览器在做一些内部魔术来重用连接,对于用户而言,整个升级过程与我无关吗?我仍然必须使用两个不同的类,我只是碰巧使用相同的端口,然后浏览器出于性能原因决定升级。真的对吗?
不,WebSocket客户端发送HTTP请求以请求WebSocket连接,然后服务器以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
Run Code Online (Sandbox Code Playgroud)
服务器响应示例:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
Run Code Online (Sandbox Code Playgroud)
维基百科的文章对此进行了很好的解释:http : //en.wikipedia.org/wiki/WebSocket#WebSocket_protocol_handshake
规范中对此进行了详细说明:https : //tools.ietf.org/html/rfc6455#section-1.3
只是浏览器在做一些内部魔术来重用连接,对于用户而言,整个升级过程与我无关吗?
没错
我仍然必须使用两个不同的类,我只是碰巧使用相同的端口,然后浏览器出于性能原因决定升级。真的对吗?
如果要使用AJAX,请使用XMLHttpRequest。如果要使用WebSocket,请使用WebSocket该类。仍然可以通过同一端口访问它们。不同之处在于,WebSocket连接将与服务器协商全双工持久性二进制通道,而WebSocket连接XMLHttpRequest仅发出请求并获得响应。