2016-12-06 84 views
0

我有一个使用Polymer作为前端的节点应用程序。该应用程序在nginx反向代理后面运行,该代理使用HTTP2处理HTTP等。我正在使用cookie会话和已签名的Cookie。使用Polymer和节点的实时聊天应用程序

我现在需要添加一个“实时聊天”的应用程序;我认为在2016年这很容易......男孩是我错了。

我的第一停靠港是Primus。但有些东西我只是不太清楚:

  • 如果节点服务器重新启动会发生什么?所有的客户端都需要重新连接吗?
  • 客户端可以注册为特定的事件类型(然后通过Primus/Websockets /等接收)。因此,每个打开的“标签”都需要自己的ID;如果服务器重新启动,并且客户端重新连接,服务器是否可以重用“订阅”列表? (这需要客户端具有相同的“ID”)

有没有标准的解决方案,我不知道这一切?

回答

0

我最近在一个聊天项目上工作,我也在客户端使用Polymer。

在服务器端,您可以像我一样使用Feathers。基本羽毛是一个简约的包装Express和使用Websockets和Socket.IO实时通信引擎盖下。它工作得很好,你不必担心创建连接等等。他们也有一个客户端JS库,您可以轻松地将其包装在Polymer组件中。

如果节点服务器重新启动,会发生什么情况?所有的客户端都需要重新连接吗?

答案是肯定的,它们会自动重新连接。

客户可以“注册”为特定的事件类型(这是假设,然后通过博智/的WebSockets /等接收)因此,每个打开的“选项”将需要自己的ID ......

这真的取决于你如何设计你的羽毛应用程序。据我所知,你想要在Facebook上的东西,你有这些标签与不同的人或多人。

对于这一点,我使用的主从数据结构:

会话(1)---(n)的消息

实施例:

对话

{ 
    "doc_created_at": "2016-09-21T07:30:02.289Z", 
    "doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "doc_id": "00f61c96-4bc6-4c46-a22d-de246314695c", 
    "doc_patched_at": "2016-10-27T11:35:53.599Z", 
    "doc_type": "conversation", 
    "participants": [ 
    { 
     "id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15", 
     "name": "User 1" 
    }, 
    { 
     "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
     "name": "User 2" 
    } 
    ], 
    "sender": { 
    "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "name": "User 2" 
    }, 
    "last_message": "How are you?" 
} 

Message#1

{ 
    "conversation_id": "00f61c96-4bc6-4c46-a22d-de246314695c", 
    "doc_created_at": "2016-09-23T06:10:28.727Z", 
    "doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "doc_id": "00e5b904-c9fa-46f1-b108-9fc9a15d11fc", 
    "doc_type": "message", 
    "participants": [ 
    { 
     "id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15", 
     "name": "User 1" 
    }, 
    { 
     "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
     "name": "User 2" 
    } 
    ], 
    "sender": { 
    "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "name": "User 2" 
    }, 
    "message": "Hi" 
} 

消息#2

{ 
    "conversation_id": "00f61c96-4bc6-4c46-a22d-de246314695c", 
    "doc_created_at": "2016-09-21T07:32:08.312Z", 
    "doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "doc_id": "2a6c2f91-04a8-4447-a0a6-4b229d523afc", 
    "doc_type": "message", 
    "participants": [ 
    { 
     "id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15", 
     "name": "User 1" 
    }, 
    { 
     "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
     "name": "User 2" 
    } 
    ], 
    "sender": { 
    "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "name": "User 2" 
    }, 
    "message": "How are you?" 
} 

我存储在数据库中(Couchbase)这些信息。

+0

请让我知道,如果你需要更多的细节。 – Hunex

+0

接受这个答案,因为它是唯一可能的理智答案。但是,我最终写了[我自己的服务器代码](https://github.com/mercmobily/hotplate/blob/master/core_modules/hotCoreComet/lib/hotCoreComet.js)和[我自己的客户端库](https:/ /github.com/mercmobily/hotplate/blob/master/core_modules/hotCoreComet/lib/comet-client.js),并用三个聚合物小工具包装客户端库... – Merc