一、socket.io介绍
socket.io是一个基于WebSocket的CS的实时通信库,他底层基于engine.io。engine.io使用WebSocket和xhr-poling(或jsonp)封装了一套自己的协议,在不支持WebSocket的低版本浏览器中使用了长轮询(long poling)来代替。socket.io在engine.io的基础上增加了namespace,room,自动重连等特性。(socket.io是一个库,一个基于engine.io协议(封装了webSocket协议)的库,在协议上创建了Engine.io引擎,socket.io则是该引擎的应用层框架)
二、WebSocket介绍(请看下面这个链接)
WebSocket详细介绍_码农sssss的博客-CSDN博客
三、socket.io相对比原生webSocket的一些特性
长轮询回退:如果无法建立webSocket链接,socket.io将会退回http长轮询进行连接,这也是为了兼容一些特别老的项目和极少数不支持的浏览器(现如今)
自动连接:在一些情况下,连接某一方面有可能在不知情的情况下断开,他有一个心跳机制,可以定时去检测是否连接,只要不是客户端主动关闭连接,socket.io就会在连接出错后不断重试以建立连接,服务端数据会进行自动缓冲,直到再次链接,为了防止断开时间过长,缓冲时间过长,可以利用使用Socket实例的connected属性进行处理,或者使用Volatile事件,使服务端丢弃原来的缓冲,只返回最新的数据。
多路复用:Socket.io允许你在单个共享链接上创建多个namespace,这些namespace拥有单独的通信通道(room)
支持Room功能:
四、socket.io 的使用
安装 socket.io
在开始使用 socket.io 之前,首先需要安装它。可以通过 npm 包管理器进行安装,只需执行以下命令:
npm install socket.io
创建一个简单的聊天应用
接下来,我们将通过创建一个简单的聊天应用来演示 socket.io 的使用。
服务器端代码
const io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log('A user connected');
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('A user disconnected');
});
});
客户端代码
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
$('form').submit((e) => {
e.preventDefault();
socket.emit('chat message', $('#message-input').val());
$('#message-input').val('');
return false;
});
socket.on('chat message', (msg) => {
$('#messages').append($('<li>').text(msg));
});
</script>