2014-07-19 2 views
2

Я пытаюсь сделать систему чата, где только два пользователи смогут общаться друг с другом в то время (так же, как чат facebook в)как я могу сделать чат-чаты с sockjs?

Я попытался мультиплексирование, используя _id MongoDB как имя, так каждый канал уникальный.

Проблема, с которой я столкнулся, заключается в том, что я не могу направить сообщение на одно клиентское соединение.

это код на стороне клиента, который первым посылает сообщение

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

это на стороне сервера, принимающий сообщение

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}}) 
} 

решения Backend специфично для каждого стека технологий, поэтому я не могу дать универсальное решения здесь. Основная идея заключается в следующем:

1) Разбираем сообщение в функции «ON_MESSAGE», чтобы найти требуемый «имя метода»

2) Если метод «установлен-канал» -> установить «я. канал»к этому значению

3) Вещание дальнейших сообщений абонентов с этим каналом (я использую Redis для этого, но это также зависит от вашей платформы)

Надеется, что это помогает!

+1

Это на самом деле очень похоже на то, что я закончил делать =). В основном я выбрал событие с уникальным идентификатором канала (например, socket.emit (Channel_ID, message)), и только клиенты, которые являются частью канала, будут прослушивать это событие. Я уже решил проблему, но спасибо за ответ =) –

+0

Привет, Дмитрий, я попытался сделать то же самое, функция connection.send() завершилась неудачно, и я вижу, что в браузере нет ошибки. Не могли бы вы помочь мне по http : //stackoverflow.com/questions/34461046/private-messaging-using-sockjs-tornado/34463050#34463050? –

Смежные вопросы