如何在服务器上build立推送通知

简要说明

好吧,因为很多天我一直在寻找这个问题的答案,但似乎有答案,“如何创build一个推送通知服务器”,像问题。 我正在使用node.js,使用sock.js“创build”一个推送通知服务器非常容易(我听说socket.io与sock.js相比并不好)。 没问题,直到这里。 但是我想要的是如何build模这样的服务器。

详情

好的,假设我有一个聊天服务的应用程序(只是一个例子,实际的东西很大,你可能已经猜到了)。 一个人在房间里发送消息,房间里的所有人都会收到通知。 但是我想要的是一个“有状态的”聊天 – 也就是说,我想将这些消息存储在数据存储中。 麻烦来了。 将信息存储在数据库中,稍后告诉所有人:“嗨,这是给你的信息”。 当我们只需要应用程序的一部分的实时活动时,这似乎很容易。 整个应用程序基于实时通信时该怎么办? 除此之外,我还想要一个RESTful API。

我的解决scheme(我不是很高兴)

我想做的是这样的:(当然在服务器端)

Data Store || Data Layer (which talks to data store) || ------------------ | | Real-Time Server Restful server 

在这里,实时服务器监听数据层发布的有趣事件。 每当有趣的事情发生,服务器通知客户端。 但是,哪个客户? – 这是我的方法的问题

希望你能帮上忙。 🙂

更新

我想我忘了强调我的问题的一个重要部分。 如何实施pub-sub系统? (注意:我不想要实际的代码,我会自己pipe理;只是如何去做这个工作就是我需要帮助的地方)。 问题是,在编写代码的时候我感到非常惊讶 – 怎么做(我的困惑从这个问题本身是非常明显的)。 请提供一些参考文献或有关如何开始这件事的一些build议?

我不确定我是否正确理解你; 但我会总结一下我是如何读的:

  1. 我们有一个实时聊天服务器,使用套接字连接向所有连接的客户端发布新消息。
  2. 我们有一个数据库,我们要保持聊天logging。
  3. 我们还有一个宁静的界面来访问实时服务器,以更懒散的方式获得当前聊天。

你想要这样构build你的系统:

系统的当前体系结构

在上图中,我用紫色曲线盘旋的组件想要像所有其他客户端一样更新。 我对吗? 我不知道你的意思是什么“数据层”,但我认为这是一个守护进程,将写入数据库,并为其他组件连接数据库。

在这个架构中,你所指的方向一切都可以。 我的意思是DataStore通过服务器连接来访问数据,也许可以查询客户端凭证进行身份validation,也可以读取用户首选项等。

为了您对这些组件的其他期望,我的意思是允许这些组件像连接的客户端一样更新,为什么不让它们成为客户呢?

为后端组件连接到实时服务器的建议设计。

您的实时服务器是客户端的服务器; 但如果我们更喜欢更常用的命名,它也是数据层或数据库服务器的客户端。 所以我们已经知道没有什么能阻止服务器成为客户端。 那么,为什么我们的数据库系统和宁静的系统也不能成为客户呢? 以与连接浏览器和其他客户端相同的方式将它们连接到实时服务器。 让他们享受成为人民之一。 🙂

我希望我不了解所有的错误,这对于这个问题是有意义的。