将 Web 套接字消息保存到 mysql 时如何防止数据丢失?

How can I prevent data loss when saving web socket messages to mysql?

我正在尝试在 nodejs 中实现一个 websocket 实时聊天系统。我已经有一个登录系统和 websocket 聊天系统。我唯一坚持的是将消息保存到 MySQL 以便用户可以访问他们的聊天记录。问题是我不想向收件人发送网络套接字消息然后 MySQL 插入因任何原因失败。

可能的解决方案: 显而易见的解决方案是将消息数据保存在 MySQL 然后 将 web socket 消息发送给接收者。如果有错误,则将其发回给发件人而不是发送消息。但是,如果服务器必须等待 MySQL 插入成功确认,这不会破坏 web 套接字的目的吗?

假设这很重要,因为您想避免等待数据库保存的少量延迟(我认为这样做实际上不是问题)。发送消息。在屏幕上,显示 'sending message..' 在服务器上,启动异步数据库保存。 当其他用户的客户端收到消息时,发送打印一个 发件人屏幕上的确认 当服务器上的数据库保存完成后,您无需执行任何操作,除非出现错误,在这种情况下您可以通知用户保存消息时出错,然后重试保存。

某些系统,例如 Google voice/video 期间的环聊甚至不尝试保存聊天记录。

只有当您的数据库服务器用完 space 或出现故障时,您才会真正遇到问题,在这种情况下,您会遇到更大的问题,并且您的错误消息会提示用户。

或者您可以等待保存到数据库中,等待的时间不会很长。此外,websockets 和 socket.io 无论如何总是去服务器。如果您使用的是 WebRTC 数据通道, 是不涉及服务器的对等 2 对等协议。