Socket.io是什么
Socket.io是一个用于在浏览器和服务器之间进行实时,双向和基于事件的通信库。
Socket.io包装了websocket,在浏览器支持的情况下优先使用websocket进行连接,否则回退到HTTP长轮询的方式,解决了部分浏览器暂不支持websocket的问题。
安装方法
在node.js服务端使用时,通过npm安装
npm install socket.io
在浏览器中使用时可通过两种方式
第一种
// socket.io在服务端的程序会自动将客户端的文件在该路径下暴露出来,
// 因此直接通过src标签引入即可
<script src="/socket.io/socket.io.js"></script>
第二种
// 在服务端...
// 如果不想通过服务端暴露的文件引用,则可以禁用该功能
const io = require('socket.io')({
// 不启用
serveClient: false
});
// 在客户端
// 然后通过cdn等方式引入(减轻自己服务器的压力)
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
与Express一起使用
const app = require('express')();
const server = require('http').createServer(app);
const options = {
/* ... */ };
const io = require('socket.io')(server, options);
io.on('connection', socket => {
/* ... */ });
server.listen(3000);
基本概念
命名空间(namespace)
命令空间是一个通信的通道,它便于分割应用的逻辑
例如:将所有客户端分割成两个空间,一个是Default空间,一个是Admin空间。对于Default空间我们可以做一些通用的操作,而对于Admin空间,我们用于做一些专用的操作。
// 在服务端...
// 建立admin命名空间
const adminNamespace = io.of('/admin');
// 对admin命名空间中的所有socket使用该中间件
adminNamespace.use((socket, next) =>