簡體   English   中英

使用Polymer和Node的實時聊天應用

[英]Real time chat app using Polymer and node

我有一個使用Polymer作為前端的節點應用程序。 該應用程序在Nginx反向代理后面運行,該代理使用HTTP2處理HTTP等。 我正在使用帶有已簽名cookie的cookie會話。

我現在需要向該應用添加“實時聊天”; 我以為在2016年這很容易...男孩,我錯了。

我的第一個停靠港是Primus。 但是有些事情我只是不太了解:

  • 如果重新啟動節點服務器會怎樣? 所有客戶端都需要重新連接嗎?
  • 客戶端可以“注冊”到特定的事件類型(然后應該通過Primus / Websockets / etc接收)。因此,每個打開的“選項卡”都需要有自己的ID。 如果服務器重新啟動,並且客戶端重新連接,服務器可以重用“訂閱”列表嗎? (這要求客戶端具有相同的“ id”)

對於我不知道的所有這些,是否有標准解決方案?

我最近參與了一個聊天項目,並在客戶端使用了Polymer。

在服務器端,您可以像我一樣使用羽毛 基本上,Feathers是Express的簡約包裝,並在內部使用Websockets和Socket.IO進行實時通信。 它確實運行良好,您不必擔心創建連接以及所有其他事情。 它們還有一個客戶端JS庫,您可以輕松地將其包裝到Polymer組件中。

如果重新啟動節點服務器會怎樣? 所有客戶端都需要重新連接嗎?

答案是肯定的,它們將自動重新連接。

客戶端可以“注冊”到特定的事件類型(然后應該通過Primus / Websockets / etc接收)。因此,每個打開的“選項卡”都需要有自己的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 )中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM