如何设计实时聊天服务器,以便任何人都可以构建客户端应用程序以通过该服务器进行通信?

How to design a realtime chat server so that anyone could build a client app for communicating through that server?

我需要创建一个服务器作为对等点之间的中间点。它必须以任何其他开发人员可以构建自己的客户端应用程序、连接到该服务器(如通信通道)并参与对话的方式工作。所有通信都应实时完成,消息应持久保存到服务器数据库。

只是构建一个聊天应用程序是非常微不足道的,但是当涉及到构建类似 'communication channel' 的应用程序时,出于某种原因让我感到困惑。

能否请您帮助我了解如何design/architect解决方案以及如何正确推理?

我想到了使用以下堆栈:Node.js、WebSockets/WebRTC、RethinkDB/MongoDB。

我应该构建一个特殊的 API 来接收和传输消息吗?除了 API(否则,第三方应用程序如何能够参与对话?),我想不出任何其他解决方案,但我不确定 API 应该工作(考虑到实时功能)。 据我了解,数据库模式应该与任何其他聊天应用程序相同。

但最让我困惑的是这个同时接收、发送和持久化数据的过程。

我寻求有关理解解决方案应该如何工作以及如何构建它的建议。

如果您想立即支持大量现有客户端,您可以选择 XMPP 路线。我这样做了,还有 Node.js、eJabberd 和 strophe。最终有一个可以与 Android 应用程序和 Iphone 应用程序通信的网页。当时不支持websockets,所以我用的是BOSH。

在架构上我有一个定义的通道。很像 2 人或更多人订阅的 IRC 频道。因此,无论何时发送消息,它都会通过此通道,将所有属性(时间戳、发件人、消息等)保存在数据库中,并广播给所有订阅者。

使用 WebSocket 的底层技术绝对是正确的选择,因为它支持实时消息传递。