2014-07-19 9 views
2

나는 두 사용자가 이름 때문에 모든 채널이기 때문에 MongoDB를의 _id를 사용하여, 나는 다중를 시도했습니다 (많은 페이스 북의 채팅 같은) 시간어떻게 sockjs와 함께 개인 대화방을 만들 수 있습니까?

에서 서로 대화 할 수있는 채팅 시스템을 만들려고 노력하고 있어요 독특한.

제가 직면 한 문제는 메시지를 단일 클라이언트 연결로 보낼 수 없다는 것입니다.

먼저 메시지

$scope.sendMessage = function() { 
    specificChannel.send(message) 
    $scope.messageText = ''; 
}; 

I 메시지를 보낼 때이 서버 측에서 모든 채널에 메시지

specificChannel.on('connection', function (conn) { 
    conn.on('data', function(message){ 
    conn.write('message') 
    } 
} 

를 수신하고, 여전히 모든 채널을 전송하는 클라이언트 측 코드 메시지를 수신합니다.

각 클라이언트가 특정 채널로 보낸 메시지 만 수신하도록하려면 어떻게해야합니까?

답변

2

SockJS는 "개인"채널을 지원하지 않는 것으로 보입니다.

var channel_id = 'my-very-private-channel' 
var connection = new SockJS('/pubsub', '') 

connection.onopen = function(){ 
    connection.send({'method': 'set-channel', 'data': {'channel': channel_id}}) 
} 

백엔드 솔루션 그래서 내가 여기에 보편적 인 솔루션을 제공 할 수있는 모든 기술 스택에 대한 특정 : 나는 유사한 문제에 대한 다음과 같은 솔루션을 사용했다. 일반 아이디어는 다음 방법은 "채널 설정"경우

1) 요청 "메소드 이름"

2)를 찾아 "ON_MESSAGE"기능에서 메시지를 구문 분석 ->은 "자기를 설정합니다. 이 값

3)에 채널은 "동일한 채널 (나는 그것을 위해 레디 스를 사용하고 있지만, 그것은 또한

는 희망이 도움) 플랫폼에 의존와 가입자에게 추가 메시지를 방송!

+1

사실 그것은 내가 결국 =과 비슷한 결과입니다. 기본적으로 고유 채널 ID (예 : socket.emit (Channel_ID, message))가있는 이벤트를 내 보낸 경우 채널에 속한 클라이언트 만 해당 이벤트를 수신합니다. 나는 이미 문제를 해결했지만 답변 =) –

+0

안녕하세요 드미트리, 나는 connection.send() 함수가 실패하고 브라우저 콘솔에 로그인 한 오류가 없다는 것을 알았습니다. http에서 나를 도울 수 있습니까? : //stackoverflow.com/questions/34461046/private-messaging-using-sockjs-tornado/34463050#34463050? –