这篇文章描述了聊天应用程序的websocket服务器是什么样子的。我们正计划实施一些类似的东西;当消息被发送到服务器时,它被发送到基于身份验证令牌的正确收件人,消息被保存在mysql数据库中。
我们最终将在Google App Engine上托管服务器,我怀疑这会导致上面描述的方法出现一些问题,因为这取决于所有客户端连接到同一服务器,而这可能不会是这种情况,因为将根据需要创建多个实例。是否有一种方法连接所有实例,使这不会是一个问题(Pub/Sub也许?(这将导致额外的成本)),还是我们应该找到一个不同的解决方案?
我的一个想法是使用mysql-events来监视来自websocket服务器的binlog,以便在消息表中创建新行,但我在某处读到不建议这样做。但是我找不到我在哪里读到的,也许这是最好的解决方案。
既然你问了其他解决方案,我建议你看看Firebase,特别是实时数据库。它提供了所有你需要的功能,在连接的客户端之间进行实时通信,并为未连接的客户端提供云消息。
这是一个使用Firestore创建实时聊天web应用程序的教程,但它可以应用于实时数据库,只需稍加修改。我之所以这么说,是因为Firestore的写入成本很高,在我看来,这使得它不适合作为聊天后端。