什么是 Socket.io
Socket.io 是一个基于 WebSocket 的 JavaScript 库,允许实时、双向通信。它能实现实时的数据推送和收取,解决了 HTTP 协议的无法保持连接的缺点。
在 Express.js 中引入 Socket.io
首先,需要在项目中安装 Socket.io 和 express.js:
npm install --save socket.io npm install --save express
然后在应用中引入:
const express = require('express') const app = express() const http = require('http').createServer(app) const io = require('socket.io')(http)
客户端与服务端的通信
在服务端启动 Socket.io 后,可以用 'connection' 事件监听客户端的连接:
io.on('connection', (socket) => { console.log('a user connected') socket.on('disconnect', () => { console.log('user disconnected') }) })
当一个客户端连接时,'connection' 事件会被触发,然后可以用 socket.on 方法监听客户端发送的事件,也可以用 socket.emit 方法向客户端发送信息。
在客户端,可以用以下方法连接到服务端:
const socket = io.connect('http://localhost:3000')
然后可以用 socket.emit 方法发送事件,也可以用 socket.on 监听服务端发送的事件。
Socket.io 的事件
Socket.io 提供了一种事件驱动的编程方式。当服务端或客户端发送或接收到事件时,会触发相应的回调函数。比如:
// 服务端发送一个事件 socket.emit('myevent', {message: 'hello'}) // 客户端监听服务端发送的事件 socket.on('myevent', (data) => { console.log(data) })
Socket.io 支持自定义事件,只需要在服务端和客户端都定义相同的事件名称即可。
示范代码
以下是一个完整的实例,演示了如何在 Express.js 中使用 Socket.io 进行通信,该示例当客户端发送消息时,服务端会将其广播给其他连接的客户端。
server.js
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - --------- ----- ---- - --------------------------------- ----- -- - -------------------------- ------------ ----- ---- -- - ---------------------- - -------------- -- ------------------- -------- -- - -------------- ---- ----------- ----------------------- -- -- - ----------------- -------------- -- -------------------- ----- -- - --------------------- -------- ------------------ ---- -- -- ----------------- -- -- - ---------------------- -- -------- --
index.html
-- -------------------- ---- ------- --------- ----- ----- ---------- ------ ----- ---------------- ---------------- ------------ ------- ------ ------------- --------- --- ------------------- ----- ------------------ ------ ----------- ------------------- ------- --------------------------- ------- ------- --------------------------------------- -------- ----- ------ - ----------------------------------- ----- ------------ - ---------------------------------------- ----- ----------- - --------------------------------------- ----- ----------- - ----------------------------------- -------------------- ----- -- - ----- ---------- - ---------------------------- -------------------- - --- ----------------------------------- -- -------------------------------------- ------- -- - ---------------------- ----- ------- - ------------------ ---------------------- -------- ------------------ - -- -- --------- ------- -------
该示例可以通过以下命令启动:
node server.js
浏览器访问 http://localhost:3000 即可。在不同的浏览器窗口或标签页中打开该地址,发送的消息会在其他窗口或标签页中实时更新。可以用该示例学习 Socket.io 的使用方法,也可以用作参考实现自己的实时通信应用。
总结
在 Express.js 应用中使用 Socket.io 可以很方便地实现实时双向通信的功能。可以用 Socket.io 提供的事件机制进行服务端和客户端的通信,大大降低了实现的复杂度。该文章是一篇深度学习指南,希望对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649bb08e48841e9894876877