使用Polymer和节点的实时聊天应用程序

时间:2016-12-06 13:28:58

标签: node.js session websocket polymer primus

我有一个使用Polymer作为前端的节点应用程序。该应用程序在nginx反向代理后运行,后者使用HTTP2处理HTTP等。我正在使用带有签名cookie的cookie会话。

我现在需要添加"实时聊天"到应用程序;我认为在2016年这很容易......男孩我错了。

我的第一个停靠点是Primus。但有些事情我还没有得到:

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

我不知道所有这些的标准解决方案吗?

1 个答案:

答案 0 :(得分:0)

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

在服务器端,您可以像我一样使用Feathers。基本上,Feathers是Express上的极简主义包装器,并使用Websockets和Socket.IO进行实时通信。它工作得很好,你不必担心创建连接等等。它们还有一个客户端JS库,您可以轻松地将其包装在Polymer组件中。

  

重新启动节点服务器会发生什么?是否所有客户都需要重新连接?

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

  

客户可以“注册”特定的事件类型(然后应该通过Primus / Websockets /等接收)因此,每个打开的“tab”都需要自己的ID ...

您是如何设计Feathers应用程序的。据我所知,你想要像Facebook那样的东西,你有不同的人或多人的这些标签。

为此,我使用了Master-detail数据结构:

会话(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)。