socket.io库
Socket.lO是一个库,可用于在浏览器和服务器之间进行实时,双向和基于事件的通信。它包括
- 使Node.js服务器
- 为浏览器(可从Node.js的也运行)一个JavaScript客户端库
主要特点是:
可靠性
即使存在以下情况,也会建立连接:
- 代理和负载平衡器。
- 个人防火墙和防病毒软件。
为此,它依赖于Engine.lO,该引氅首先建立长轮询连接,然后尝试升级到在侧面进行“测试"的更好传输,例如WebSocket。请参阅”目标"部分以获取更多信息。
*既能兼容老版本得浏览器,又能兼容新的websocket
自动重新连接支持
除非另有指示,否则断开连接的客户端将尝试永久重新连接,直到服务器再次可用为止。请在此处查看可用的重新连接选项。
二进制支持
可以发出任何可序列化的数据结构,包括:
- 浏览器中的ArrayBuffer和Blob
- Node.js中的ArrayBuffer和Buffer
多路传输支持
为了在应用程序内创建关注点分离(例如,每个模块或基于权限),Socket.lO允许您创建多个Namespaces,它们将充当单独的通信通道,但将共享相同的基础连接。
断线检测
心跳机制在Engine.lO级别上实现,使服务器和客户端都可以知道对方何时不再响应。
通过在服务器和客户端上设置计时器,并在连接握手期间共享超时值(pingInterval和pingTimeout参数),可以实现该功能。这些计时器要求将任何后续客户端调用都定向到同一服务器,因此使用多个节点时需要执行粘性会话。
客房支援
在每个Namespace中,您可以定义套接字可以加入和离开的任意通道,称为Rooms。然后,您可以广播到任何给定的房间,到达已加入该房间的每个插槽。
这是有用的功能,用于向一组用户或连接到多个设备的给定用户发送通知。这些功能附带一个简单便捷的API,如下所示:
io.on ( 'connection', function (socket) {
socket.emit ( 'request',/* */) ;//向套接字发出事件
io.emit ( 'broadcast',/* */);//向所有连接的套接字发出事件socket.on ( 'reply',function() {/* */});//监听事件
});
什么不是Socket.lO
Socket.lO 不是WebSocket实现。尽管Socket.lO确实确实在可能的情况下使用WebSocket作为传输工具,但它会向每个数据包添加一些元数据:当需要消息确认时,数据包类型,名称空间和数据包ID。这就是为什么
WebSocket客户端将无法成功连接到Socket.IO服务器,而Socket.lO客户端也将无法连接到WebSocket服务器的原因。请在此处查看协议规范。
//警告:客户端将无法连接!
const client = io ('ws: / / echo.websocket.org') ;
安装socket
服务器端:
npm install --save socket.io
客户端:
npm install-save socket.io-client
直接引入
https://github.com/socketio/socket.io-client/tree/master/dist
单击socket.io.js
压缩后的
客户端(index.html)
<script src=" /socket.io/socket.io.js"></script>
<script>
var socket = io(http: / / localhost ');
socket.on ( 'news " , function (data) {
console.log(data);
socket.emit( 'my other event " , { my: "data" });
});
</script>