2016-12-06 1 views
0

Polymer를 프런트 엔드로 사용하는 노드 애플리케이션이 있습니다. 응용 프로그램은 HTTP2를 사용하여 HTTPS 등을 처리하는 nginx 역방향 프록시에서 실행됩니다. 서명 된 쿠키와 함께 쿠키 세션을 사용하고 있습니다.Polymer 및 노드를 사용하는 실시간 채팅 앱

이제 앱에 "실시간 채팅"을 추가해야합니다. 나는 2016 년에 그것은 쉬울 것이라고 생각했다 ... 소년은 내가 틀렸다.

제 첫 번째 전화는 Primus입니다. 하지만 방금 얻지 못한 것들이 있습니다 :

  • 노드 서버가 다시 시작되면 어떻게됩니까? 모든 고객이 다시 연결해야합니까?
  • 클라이언트는 특정 이벤트 유형 (Primus/Websockets/등을 통해 수신하기로되어 있음)에 '등록'할 수 있습니다. 따라서 열린 "탭"마다 자체 ID가 필요합니다. 서버가 다시 시작되고 클라이언트가 다시 연결되면 서버가 "가입"목록을 다시 사용할 수 있습니까? (이것은 클라이언트가 동일한 "id"를 가져야 함)

내가 인식하지 못하는 모든 것에 대한 표준 해결책이 있습니까?

답변

0

저는 최근에 채팅 프로젝트에서 일했고 클라이언트 측에서도 Polymer를 사용했습니다.

서버 쪽에서는 내가했던 것처럼 Feathers을 사용할 수 있습니다. 기본적으로 Feathers는 Express 이상의 미니멀리스트 래퍼이며 실시간 통신을 위해 웹 소켓과 Socket.IO을 사용합니다. 정말 잘 작동합니다. 연결 및 모든 것을 만드는 것에 대해 걱정할 필요가 없습니다. 또한 클라이언트 측 JS 라이브러리가있어서 Polymer 구성 요소로 쉽게 래핑 할 수 있습니다.

노드 서버를 다시 시작하면 어떻게됩니까? 모든 고객이 다시 연결해야합니까?

답변이 '예'인 경우 자동으로 다시 연결됩니다.

클라이언트는 ... 그래서, 각 열 "탭"해야합니다 자신의 ID (다음 프리머스/WebSocket을/등.을 통해받을 생각되는) 특정 이벤트 유형에 '등록'할 수

깃털 앱을 디자인하는 방법은 실제로 당신에게 달려 있습니다. 내가 이해하는 것처럼 당신은 다른 사람들이나 여러 사람들과 함께 탭을 가지고있는 페이스 북과 같은 것을 원한다.이를 위해

는 I 마스터 - 세부 데이터 구조를 사용했을

회화 (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)에서 이러한 정보를 저장.

+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), 3 개의 폴리머 위젯으로 클라이언트 라이브러리를 래핑했습니다 ... – Merc