2010-12-11 4 views
2

사용자가 대화방을 열 수있는 사이트가 있다고 가정 해 보겠습니다. 회의실이 열리면 다른 사용자를 초대하고 채팅 할 수 있습니다.WebSocket 서버의 모범 사례는 무엇입니까?

클라이언트와의 통신에 WebSocket을 사용하려는 척도합니다. 대부분의 서버 측 WebSocket 구현에는 브로드 캐스트를 시작한 사람이 아닌 연결된 모든 호스트에 메시지를 보내는 connection.broadcast(message)과 같은 간단한 기능이 있습니다. 이것은 훌륭한 기능입니다. 왜냐하면 당신이 자신의 모든 클라이언트의 목록을 유지하고 업데이트 할 필요가 없기 때문입니다. 대화방 예제의 문제점은이 경우 모든 사람에게 모든 메시지를 브로드 캐스트하지 않고 같은 방에있는 다른 클라이언트에게만 브로드 캐스트하려는 것입니다.

이 두 가지 옵션으로 나를 잎 :

  • 롤 차례로 모든 클라이언트 및 객실을 추적하는 것을 의미한다 내 자신의 broadcastToRoom(room_id) 기능을.
  • 새 회의실이 만들어 질 때마다 새 포트에서 서버의 새 인스턴스를 생성합니다.

무엇을 하시겠습니까?

+0

내가 바로 각 방에 대한 새로운 서버를 산란에서 멀리 부끄러워 것 - 자원의 전체 HTTP 서버를 위해 설계되었습니다하지 무엇을, 폐기물, 당신의 포트는 재빨리 당신이 나중에 그 방향으로 무언가를 확장하기로 결정했다면, 방 사이에서 데이터를 교환하는 것이 훨씬 어렵습니다. –

답변

5

각 방의 사용자 목록을 보유하고있는 각 방에 대해 자신의 버전을 롤백하면 다른 사람이 그 방의 /에 메시지를 보내면 방의 모든 사용자에게 메시지를 보냅니다. 프로토콜을 사용하면 메시지의 원래 보낸 사람을 제외 할 수 있습니다.

어쨌든 각 방의 사용자 목록이 있으므로 방금 연결을 속성으로 사용자 개체에 추가 할 수 있습니다.

그러나 현재 WebSocket 사양의 최근 "발견 된"보안 문제로 인해 Opera와 Mozilla는 새 버전이 발급 될 때까지 WebSocket에 대한 지원을 비활성화했습니다. 따라서 WebSocket의 가용성이 널리 보급되고 서버가 새 버전으로 변경되어야하는 데는 더 많은 시간이 걸릴 것입니다. 자세한 내용은

참조 :
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
http://blog.pusherapp.com/2010/12/9/it-s-not-websockets-it-s-your-broken-proxy

+0

2017 업데이트 : 저는 Mozilla가 현재 지원하고 있으며 우리는 Opera와 매우 오래된 IE에 이르고 있다고 믿습니다. – vapurrmaid

관련 문제