如何在服务器上建模推送通知

Par*_*kar 1 architecture real-time push-notification node.js

简要说明:

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

细节:

好的,所以,假设我有一个应用程序,其中有一个聊天服务(这只是一个例子,实际上你可能已经猜到了很大的事情).一个人在一个房间里发送一条消息,并通知房间里的所有人.但我想要的是"有状态"聊天 - 也就是说,我想将消息存储在数据存储中.这就是问题所在.将消息存储在数据库中,然后告诉大家"嘿,有消息给你".当我们只需要应用程序的一部分进行实时活动时,这似乎很容易.当整个应用程序基于实时通信时该怎么办?除此之外,我还想拥有一个RESTful api.

我的解决方案(我并不高兴)

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

                 Data Store
                     ||
                 Data Layer (which talks to data store)
                     ||
            ------------------
            |                |
     Real-Time Server   Restful server
Run Code Online (Sandbox Code Playgroud)

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

希望你能帮上忙.:)

更新:

我想我忘了强调我问题的一个重要部分.如何实现pub-sub系统?(注意:我不想要实际的代码,我会自己管理;只是如何去做我需要帮助的地方).问题是我在编写代码时感到非常困惑 - 该怎么做(我的混淆从这个问题本身就很明显).请提供一些阅读的参考或一些关于如何开始这个事情的建议?

has*_*sin 9

我不确定我是否理解正确; 但我会总结一下我的阅读方式:

  1. 我们有一个实时聊天服务器,它使用套接字连接向所有连接的客户端发布新消息.
  2. 我们有一个数据库,我们希望保留聊天记录.
  3. 我们还有一个安静的界面来访问实时服务器以更懒惰的方式获取当前聊天.

您希望以这种方式构建您的系统:

当前的系统架构

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

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

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

后端组件与实时服务器连接的建议设计.

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

我希望我不会完全理解一切,这对于这个问题是有道理的.