2013-03-18 5 views
2

Как мы можем реализовать частную систему сообщений (клиент к клиенту) с помощью Websockets (и PHP)?личное сообщение с использованием websockets

Из того, что я понял, сервер передает сообщение, и все клиенты могут получать сообщение через обработчик события connection.onmessage. Мне было интересно, есть ли способ отправить сообщение только целевому пользователю в websockets?

+0

Я видел это http://stackoverflow.com/questions/14592513/websocket-message-to-specific-user, но на это нет ответа. – Moe

ответ

7

Когда клиент отправляет сообщения (ws.send(message);), ваш сервер WebSocket получит сообщение. Сокеты, которые вы отправляете на это, полностью определяются вашим кодом сервера - вашей реализацией.

Для создания индивидуального чата вам нужен способ маршрутизации данных между двумя клиентами, участвующими в чате. Вам также нужен способ аутентификации, что только эти два клиента могут получить эту информацию.

Рамки WebSocket имеют тенденцию обеспечивать дополнительный слой PubSub, например. Пушер (я работаю) делаю это с помощью channels. Вы найдете аналогичную терминологию наряду с темами и темами.

Как только у вас есть способ маршрутизации данных (сообщений чата) между двумя клиентами, вам необходимо рассмотреть возможность аутентификации подписки. Более подробную информацию можно найти по этому вопросу, который задает How do I create Private channel between two user. Речь идет о Ruby, но применима к любой технологии.

+0

Спасибо, Leggetter. Кажется, реализация решения с использованием socket.io и node.js проще. – Moe

+0

socket.io - не единственный вариант, и я бы порекомендовал вам взглянуть на альтернативы. Для PHP есть [Ratchet] (http://socketo.me) и [Гаечный ключ] (https://github.com/varspool/Wrench). Тем не менее, они не предлагают резервные копии, когда WebSockets не присутствуют. Если вы смотрите на node.js, посмотрите на [Faye] (http://faye.jcoglan.com/). Если вы хотите придерживаться PHP и хотите, чтобы резервные соединения были соединены, то Pusher - хорошее решение. – leggetter

+0

Leggetter, спасибо за ваш ответ. – Moe

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