node.js基于socket.io快速实现一个实时通讯应用

2020-06-17 05:39:14易采站长站整理

随着web技术的发展,使用场景和需求也越来越复杂,客户端不再满足于简单的请求得到状态的需求。实时通讯越来越多应用于各个领域。

HTTP是最常用的客户端与服务端的通信技术,但是HTTP通信只能由客户端发起,无法及时获取服务端的数据改变。只能依靠定期轮询来获取最新的状态。时效性无法保证,同时更多的请求也会增加服务器的负担。

WebSocket技术应运而生。

WebSocket概念

不同于HTTP半双工协议,WebSocket是基于TCP 连接的全双工协议,支持客户端服务端双向通信。

WebSocket
使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WebSocket API
中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

实现

原生实现

WebSocket对象一共支持四个消息 onopen, onmessage, onclose和onerror。

建立连接

通过javascript可以快速的建立一个WebSocket连接:


var Socket = new WebSocket(url, [protocol] );

以上代码中的第一个参数

url
, 指定连接的URL。第二个参数
protocol
是可选的,指定了可接受的子协议。

同http协议使用

http://
开头一样,WebSocket协议的URL使用
ws://
开头,另外安全的WebSocket协议使用
wss://
开头。

当Browser和WebSocketServer连接成功后,会触发onopen消息。


Socket.onopen = function(evt) {};

如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息。


Socket.onerror = function(evt) { };

当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。


Socket.onclose = function(evt) { };

收发消息

当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据。


Socket.onmessage = function(evt) { };