Socket.io 是一种开源技术,用于通过互联网实现实时连接。它以简单、直接而著称,这使得它可以轻松实现需要实时双向连接的功能。
Socket.io 将服务器和客户端之间的连接视为一组事件,其中每个事件都能发射和监听事件。
Socket.io 的应用多种多样,因为它是一种开源技术,可以通过定制来实现很多目的。它常用于聊天应用程序和涉及自我更新内容的应用程序。
今天,我们将讨论如何通过 socket.io 实现通知功能。首先,我们有一个包含用户请求的网站。任何看到请求的用户都可以提供满足请求的服务。我们需要在请求所有者的请求得到满足时通知他。
前提条件
首先,我们需要在服务器上安装 socket.io,并在客户端应用程序中安装 socket.io 客户端(本例中我们使用 React 和 Flutter)。
# Server
npm install --save socket.io
# React App
npm install --save socket.io-client
dependencies:
socket_io_client: ^1.0.2
初始化连接
然后,我们需要让每个客户端加入一个标有用户 ID 的房间,这样服务器就能区分用户并发送特定通知。为此,我们将让客户端在连接后立即发送加入房间的请求。
// Server Side
io.on('connection', (socket) => {
socket.on("joinRoom", (token) => {
let userData = usersModel.verifyToken(token);
if (!userData) return;
socket.join(userData.id);
})
})
// Client Side
const socket = io();
socket.on('connect', () => {
socket.emit("joinRoom", ACCESS_TOKEN);
});
在前面的代码中,客户端向服务器发送访问令牌,以便服务器能够验证令牌并获取用户 ID。
系统设计
现在我们要规划通知系统的流程,为此我们制作了一个序列图,强调系统的行为:
现在我们知道了要运行我们的功能需要实现的事件:
客户端发出的事件:
- 加入房间
- 创建报价
- 接受报价
- 协商报价
- 拒绝报价
服务器发出的事件:
- 新报价
- 接受报价
- 协商报价
- 拒绝报价
请注意,服务器事件总是客户端事件的结果,因为用户会收到关于其他用户所做操作的通知。
每当客户端接收到一个事件,它就应该以适当的方式呈现通知并显示给用户。这样,用户就能获得有关请求/报价的实时更新,而无需重新加载或执行任何操作。
注意事项
- 这些事件涉及数据库操作,因此在提交到数据库之前,必须小心验证来自客户端的所有数据。
- 确保授权令牌每次都有效,因为您可能会收到来自冒充某个用户的黑客的事件。
- 确保在用户注销后关闭套接字连接,以避免崩溃。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/33064.html