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

Real time chat app using Polymer and node

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

我现在需要在应用程序中添加一个 "real time chat";我以为在 2016 年会很容易...男孩我错了。

我的第一个停靠港是 Primus。但有些事情我不太明白:

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

我最近在做一个聊天项目,我也在客户端使用了Polymer。

在服务器端,您可以在后台使用 Feathers like I did. Basically Feathers is a minimalist wrapper over Express and uses Websockets and Socket.IO 进行实时通信。它工作得非常好,您不必担心创建连接等等。他们还有一个客户端 JS 库,您可以轻松地将其包装在 Polymer 组件中。

What happens if the node server is restarted? Will all of the client need to reconnect?

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

The clients can 'register' to specific event types (which are then supposed to receive via Primus/Websockets/etc.) So, each opened "tab" will need its own 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)。