nodejs学习笔记(20)-socket学习(4) - socket.io模块
socket.io
模块
Socket.IO
与ws
相似,但是却比ws
开发效率更高的一个WebSocket
模块,socket.io
包括了客户端的js
和服务器端的nodejs
,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用,有以下特点:- 易用性:
socket.io
封装了服务端和客户端,使用起来非常简单方便。 - 跨平台:
socket.io
支持跨平台,这就意味着你有了更多的选择,可以在自己喜欢的平台下开发实时应用。 - 自适应:它会自动根据浏览器从
WebSocket
、AJAX长轮询
、Iframe
流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5
- 支持自定义监听事件: 我们之前在
ws
模块中,只能通过ws.on('message',function)
的方式来监听里面的switch
分支来实现群聊和私聊功能等,但是使用socket.io
就能实现自定义监听,如前端:io.on('群聊',function)
,服务端:emit('群聊')
就能实现监听一个群聊消息 - 自动重新启动功能的实现:
socket.io
模块下的客户端会在我们服务器重启后自动的向服务器连接,就不会像我们使用ws
模块的时候,服务器自动重启过后客户端需要重新刷新
- 易用性:
基本使用
安装socket.io
npm install socket.io |
引入以及搭建socket
服务器
//引入以及搭建服务器 |
基于express
框架的使用(服务端)
/* |
socket模块的引入
(客户端),浏览器前端内置ws模块
因此不需要引入
客户端的使用文档
<!-- 引入socket.io.min.js (前面执行了安装socket.io后我们可以直接在node_modules中引入)--> |
socket.io
模块的基本使用
//前端页面 |
- 前后端消息的转发与接收(
形式与vue的事件总线非常的相似
)
//后端收发消息 |
io模块
服务端提供的一些特殊api
,与ws模块
的区别
- 获取所有当前连接到这台
socket
服务器的客户端
//ws模块 |
- 对所有当前连接到这台
socket
服务器的客户端进行操作
//ws模块 |
之所以说io模块
相较于ws模块
更加的自由,是因为io模块
在服务端只提供两个固定的消息事件,那就是connection
(当有客户端连接到这台服务器的时候)以及disconnection
(当有客户端从这台服务器中断联的时候)
//当有客户端链接到这台服务器的时候 |
给特定的客户端发送消息
- 因为
io模块
不像ws模块
存在.clients
这个属性能过获取所有当前连接到这台服务器的客户端,所以只能使用io.sockets.sockets
(里面存放着所有连接到这台服务器上的客户端),然后通过将其转化为数组再通过特定的条件来遍历获取特定客户端,切记因为io.sockets.sockets
是以map
结构来存储数据的,因此你将它转化为数组后应该是一个二维的数组,因此我们需要注意调用:item[1]
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库