聊天应用程序:成功重新连接到 WebSocket 服务器后该怎么办?

Chat app: What to do on successful re-connection to the WebSocket server?

我和我的朋友目前正在使用 WebSocket 构建一个基于 Web 的聊天应用程序。我负责客户端(React + Redux)。服务端用的是Golang(不知道这个组合好不好,反正我是玩玩的)

基本上我的问题是,在成功重新连接到 WebSocket 服务器后,我不知道该怎么办。

更具体地说:

客户端在连接丢失时尝试重新连接到服务器。我的问题是

  1. 重连成功后,本该发给服务器的数据,却因为断线而没有发送,怎么办?是不是最好有一个缓冲区之类的东西来存储所有还没有传输到服务器的数据?

  2. 目前,React 组件会在 componentDidMount 上初始获取所有必要的数据(房间、朋友、聊天记录等)。为了让应用程序在成功重新连接时与服务器同步,应用程序应该执行类似于初始获取的操作。但是故意调用 componentDidMount 似乎不是一个好主意,因为它不应该以这种方式调用。首先在componentDidMount进行初始抓取好不好?

由于这是一个笼统的问题,所以我会笼统地回答:

  1. 您需要在应用程序和不可靠流之间建立某种缓冲区。由于您是被动的,因此您可以使用可观察对象来实现它。负责通过 WebSocket 进行实际通信的服务将订阅此提要。

  2. 将组件的初始化与数据的初始化分开。如果您通过 WebSocket 进行通信,则可以在每次套接字连接时重新初始化数据。

Go 对于聊天服务器来说当然是一个不错的选择,因为它处理并发的方式。聊天服务器的另一个常见选项是 Erlang。 React 是个人喜好问题。

  1. 您可能不想缓冲所有内容。您只想缓冲消息而不是,例如,键入指示符,因为如果不立即发送它们就没有意义。像 push()shift() 这样简单的数组就可以了。

  2. 将数据获取移动到一个单独的函数,然后从 componentDidMount 和回调或您重新连接的任何地方调用它。

在一个应用中同时使用 HTTP 和 websocket 是一个设计问题。不过,这似乎确实使事情复杂化。