轮询、长轮询及流三种提供实时数据解决方案,都会涉及到HTTP请求和相应报头,其中包含大量额外的、不必要的报头数据,会造成传输延迟。 WebSocket,是Web应用程序的传输协议,类似于TCP,提供了
轮询、长轮询及流三种提供实时数据解决方案,都会涉及到HTTP请求和相应报头,其中包含大量额外的、不必要的报头数据,会造成传输延迟。
WebSocket,是Web应用程序的传输协议,类似于TCP,提供了双向的、按序到达的数据流。作为Web的一部分,WebSocket连接的是URL,而非因特网上的主机和端口。
WebSocket使用:
要连接远程主机,只需要新建一个WebSocket实例,提供希望连接的对端URL。
ps:ws://和wss://前缀分别表示WebSocket连接和安全WebSocket连接
基于同一底层TCP/IP连接,在客户端和服务器端之间的初始握手阶段,将HTTP协议升级至WebSocket协议,WebSocket连接就建立完成了。连接一旦建立完成,WebSocket数据帧就可以以全双工的模式在客户端和服务器间进行双向传送。
连接本身,是通过WebSocket接口定义的message事件和send函数来运作的。
时间监听器:
WebSocket编程遵循异步编程模式;
打开Socket后,只需要等待事件发生,而不需要主动向服务器轮询,所以需要在WebSocket对象中添加回调函数来监听事件:
四个事件:
open:Socket连接建立时被触发
message:收到消息时被触发
close:Socket连接关闭时被触发
error:错误事件发生时会响应未料到的错误
事件处理回调函数:
onopen: webSocket.onopen = function(e) {...}
onmessage: webSocket.onmessage = function(e) {...}
onclose: webSocket.onclose = function(e) {...}
onerror: webSocket.onerror = function(e) {...}
发送消息:
WebSocket处于打开状态时,可以采用send()方法来发送消息;
document.getElementById("sendBtn").onclick = function() {
webSocket.send(document.getElementById("inputMsg").value);
}