我最近在一个聊天项目上工作,我还在客户端使用了 Polymer。
在服务器端,您可以像我一样使用Feathers 。基本上,Feathers 是Express上的极简包装器,并在后台使用 Websockets 和Socket.IO进行实时通信。它工作得非常好,你不必担心创建连接等等。他们还有一个客户端 JS 库,您可以轻松地将其包装在 Polymer 组件中。
如果重新启动节点服务器会发生什么?所有客户端都需要重新连接吗?
答案是肯定的,它们会自动重新连接。
客户端可以“注册”到特定的事件类型(然后应该通过 Primus/Websockets/等接收)因此,每个打开的“选项卡”都需要自己的 ID ...
如何设计 Feathers 应用程序完全取决于您。据我了解,您想要类似 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?"
}
消息 #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)中。