Socket.IO 是一个基于 Node.js 的实时应用程序框架,它允许实时、双向和事件性通信。它包含一个客户端库和一个服务器库,并在不同的传输协议之间具有自动降级的能力。Socket.IO 提供了可靠性和实时性,被广泛用于聊天应用程序、实时游戏和协作编辑等在线应用。
一、安装
要使用 Socket.IO,你需要在服务器端和客户端分别安装 Socket.IO 库。在服务器端,可以使用 npm 安装 Socket.IO:
1 | npm install socket.io |
在客户端,可以使用 Script 标签加载 Socket.IO 库:
1 | <script src="/socket.io/socket.io.js"></script> |
二、建立连接
Socket.IO 在服务器和客户端之间建立一个 WebSocket 连接,这样就可以实时地发送和接收数据。下面是一个简单的服务器端代码,用来监听客户端连接:
1 | const io = require("socket.io")(server); |
在客户端,可以使用 io 对象来连接服务器:
1 | const socket = io("http://localhost:3000"); |
将 http://localhost:3000 替换为你的服务器地址和端口号。
如果连接成功,会触发 connect 事件:
1 | socket.on("connect", () => { |
三、发送和接收数据
Socket.IO 在服务器和客户端之间的通信是通过事件(event)来进行的。可以使用 socket.emit() 方法发送一个事件,使用 socket.on() 方法监听一个事件。
服务器端:
1 | io.on("connection", (socket) => { |
客户端:
1 | socket.on("message", (message) => { |
在上面的代码中,当客户端连接到服务器时,服务器会向客户端发送一个 message 事件,并在客户端上显示欢迎消息。
当用户输入一条消息并点击发送按钮时,客户端会发送一个 chat 事件到服务器,并且服务器会将这条消息广播给所有连接到服务器的客户端。同时,客户端通过监听 chat 事件来接收服务器发来的消息,并在页面上显示。
四、断开连接
当客户端不再需要连接服务端时,应该关闭这个连接。可以使用 socket.disconnect() 方法,在客户端关闭连接:
1 | socket.disconnect(); |
在服务器端,可以监听到 disconnect 事件:
1 | io.on("connection", (socket) => { |
在这个事件处理程序中,可以进行一些必要的清理操作,例如从在线用户列表中移除该用户,或者取消对该用户的监听等。
Socket.IO还提供了许多丰富的功能,例如房间(rooms)、命名空间(namespace)、广播(broadcasting)、Acknowledgements等,这些功能,就等待大家自己来探索了。