Socket.IO 是一个实时通信库,它允许你在浏览器和服务器之间建立持久连接。它支持多种传输机制,包括 WebSocket、HTTP 长轮询等,并且可以自动选择最佳的传输方式。
安装 Socket.IO
首先需要安装 socket.io
和 socket.io-client
:
npm install socket.io npm install socket.io-client
服务端安装
在你的 Node.js 应用程序中引入 socket.io
:
const io = require('socket.io')(server);
这里的 server
是一个 HTTP 服务器实例。如果你还没有创建 HTTP 服务器,可以使用如下代码创建:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ----------------------- ---- -- - ------------------ - --------------- ----------- --- ------------------ ------------- --- ----- -- - ----------------------------- ------------------- -------- -- - -------------- ---- ------------ ----------------------- -- -- - ----------------- --------------- --- --- ------------------- -- -- - ---------------------- -- --------- ---
客户端安装
在客户端引入 socket.io-client
:
-- -------------------- ---- ------- ------- --------------------------------------- -------- ----- ------ - ----------------------- -------------------- -- -- - ---------------------- -- --- --------- --- ----------------------- -- -- - ------------------------- ---- --- --------- --- ---------
Socket.IO 基础
连接事件
当客户端连接到服务器时,服务器会触发 connection
事件:
io.on('connection', (socket) => { console.log('a user connected'); socket.on('disconnect', () => { console.log('user disconnected'); }); });
发送消息
服务器可以通过调用 socket.emit
方法来发送消息给特定的客户端:
socket.emit('news', { hello: 'world' });
客户端通过监听 news
事件来接收消息:
socket.on('news', (data) => { console.log(data); });
广播消息
如果你想向所有客户端广播一条消息,可以使用 io.emit
方法:
io.emit('some event', { some: 'data' });
室(Room)
你可以将客户端分配到不同的房间,以便更有效地管理连接:
socket.join('some room');
然后你可以向特定房间发送消息:
io.to('some room').emit('some event', { some: 'data' });
自定义事件
除了默认的连接和断开事件之外,你还可以定义自定义事件并处理它们:
socket.on('my other event', (data) => { console.log(data); });
客户端可以触发这个事件:
socket.emit('my other event', { my: 'data' });
实战案例:聊天室
服务端代码
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---- - ---------------- ----- -------- - --------------------- ----- --- - ---------- ----- ------ - ----------------------- ----- -- - ----------------- ------------ ----- ---- -- - ---------------------- - --------------- --- ------------------- -------- -- - -------------- ---- ------------ --------------- --------- ----- -- - ------------- --------- ----- --- ----------------------- -- -- - ----------------- --------------- --- --- ------------------- -- -- - ---------------------- -- --------- ---
客户端代码
-- -------------------- ---- ------- --------- ----- ------ ------ ---------------- ------------ ------- - - ------- -- -------- -- ----------- ----------- - ---- - ----- ---- ---------- ------ - ---- - ----------- ----- -------- ---- --------- ------ ------- -- ------ ----- - ---- ----- - ------- -- -------- ----- ------ ---- ------------- ---- - ---- ------ - ------ --- ----------- -------- ---- ----- ------- ----- -------- ----- - --------- - ---------------- ----- ------- -- -------- -- - --------- -- - -------- --- ----- - --------- ----------------- - ----------- ----- - -------- ------- ------ --- ------------------- ----- ---------- ------ ------ ------------------ ----------------------- ------- ------- --------------------------------------- ------- -------------------------------------------------------- -------- ---------- -- - --- ------ - ----- ---------------------------- - ------------------- -- -------- ---- --------- ----------------- --------- --------------- ---------------- ------ ------ --- --------------- --------- -------------- ------------------------------------------- ------------------ ---------------------------- --- --- --------- ------- -------
总结
本章介绍了如何使用 Socket.IO 来实现简单的实时通信功能。通过这些基础知识,你可以进一步探索和应用 Socket.IO 的高级特性。希望你能利用这些知识构建出有趣的实时应用程序!