Socket.IO学习

1.Socket.IO是什么

  socket.io是一个库,支持浏览器和服务器之间的实时、双向和基于事件的通信。它包括:

  • 一个node.js服务端(源码
  • 一个基于浏览器的JavaScript客户端库(也可以运行于node.js)(源码

它的主要特性如下:

实时性

会建立连接,即使存在以下情况:

  • 代理和负载均衡服务器。
  • 个人防火墙和杀毒软件。

因此,它依赖于Engine.IO--首先建立一个长轮询连接,然后尝试升级,以更好地在侧面“测试”传输,比如WebSocket。有关更多信息,请参见目标部分。

支持自动重连

除非显示指定,否则一个断开连接的客户端将会一直试图重新连接,直到服务器再次可用为止。请在这里查看可用的重新连接选项。

断开检测

Engine.IO层面实现了心跳检测机制,使得服务器和客户端知道对方何时不再响应。

该功能通过在服务器和客户端上设置计时器实现,并在连接握手期间共享超时值(pingInterval和pingTimeout参数)。这些计时器要求将任何后续客户端调用定向到同一服务器,因此在使用多个节点时需要使用sticky-session。

对二进制的支持

任何可序列号的数据结构都可以被发送,包括:

  • 浏览器中的ArrayBuffer和Blob。
  • Node.js中的ArrayBuffer和Buffer。

多路复用

为了在应用程序中创建关注点分离(例如每个模块或基于权限),Socket.IO允许您创建多个Namespaces,这些Namespaces将作为独立的通信通道,但将共享相同的底层连接。

房间支持

在每个Namespaces中,您可以定义任意的通道,称为Rooms,socket可以连接和离开。然后,您可以向任何给定的房间广播,到达连接它的每个socket。

这是一个有用的特性,可以向一组用户发送通知,或者向连接在多个设备上的给定用户发送通知。

 

这些特性可以用一个简单而方便的API展示,如下所示:

io.on('connection', function(socket){
  socket.emit('request', /* */); // emit an event to the socket
  io.emit('broadcast', /* */); // emit an event to all connected sockets
  socket.on('reply', function(){ /* */ }); // listen to the event
});

2.Socket.IO不是什么

socketio不是WebSocket网络通信协议的实现。尽管socketio确实在可能的情况下使用WebSocket作为传输。它向每个包添加一些元数据:包类型、名称空间和ack id(当需要消息确认时)。这就是为什么WebSocket客户机不能成功地连接到socketio服务器,并且一个socketio客户端也无法连接到WebSocket服务器。请参见这里的协议规范。

// WARNING: the client will NOT be able to connect!
const client = io('ws://echo.websocket.org');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值