2016-06-24 2 views
0

Я хочу создать частную систему сообщений, используя NodeJS и websockets. Мне было интересно, какой лучший способ создать такую ​​систему.NodeJS - Лучший способ обработки личных сообщений?

Лучше создать 1 nodeJS-сервер и связать прослушивание событий для каждого пользователя или создать уникальный порт/сервер для каждого разговора между двумя пользователями. т.е.

разговор 1 (user1 & пользователь2): порт 8080

разговор 2 (пользователь2 & user3): порт 8081

разговор 3 (user1 & user3): порт 8082

ответ

1

Лучше создать 1 nodeJS-сервер и связать прослушивание событий для каждого , или я должен создать уникальный порт/сервер для каждого разговора между 2 пользователями. т.е.

Ни то, ни другое.


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

  1. Пользователь идентифицирует себя на сервере с определенными полномочиями при входе в систему и подключении к серверу. Затем ваш сервер знает, к какому пользователю принадлежит какое соединение.
  2. Затем сервер может облегчить частный разговор между любыми двумя пользователями, просто разрешив userA передавать сообщения пользователю и типу/наоборот, но не позволяя кому-либо другому обращаться к этим сообщениям. Для каждого пользователя не требуется отдельный сервер. Не требуется настраиваемый порт. Вам нужна какая-то служба проверки подлинности пользователя, чтобы вы могли узнать, какой пользователь имеет определенный уровень доверия.

В этом socket.io demo chat server вы можете увидеть некоторые детали того, о чем вы просите.

Вот более подробное описание того, как это работает:

  1. UserA подключается к серверу и идентифицирует себя.
  2. UserB подключается к серверу и идентифицирует себя.
  3. UserC подключается к серверу и идентифицирует себя.
  4. UserA отправляет сообщение серверу, в котором серверу предлагается отправить личное сообщение пользователю.
  5. Сервер получает это сообщение от UserA и перенаправляет его на UserC.
  6. UserC получает личное сообщение от пользователяA.
  7. Сервер не хранит сообщение от UserA или когда-либо отправляет его другим пользователям (что делает его частным сообщением).
  8. Пользователь UserC может затем ответить на UserA, используя тот же механизм.

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

+0

Я использую систему входа с уникальным адресом электронной почты для каждого пользователя. Когда пользователь успешно вошел в систему, создаются два сеанса PHP: один с уникальным идентификатором пользователя и один с уникальным адресом электронной почты. Когда пользователь регистрируется и нажимает на правую кнопку, отображается всплывающее модальное сообщение со списком подключенных пользователей узла/порта nodeJS. Я использую пользовательский интерфейс, как этот удивительный код: [link] (http://codepen.io/Momciloo/pen/bEdbxY) Так как информация хранится в сеансе PHP, как я могу определить в JavaScript (nodeJS), какой пользователь хочет отправить сообщение кому-то еще? – Piet

+0

@Piet - вам понадобится доступ к сеансу в node.js. Я понятия не имею, можно ли получить доступ к сеансу PHP из node.js или нет. Это зависит от множества характеристик вашего развертывания и настроек cookie в сеансе. Если node.js-сервер был поддоменом PHP-сервера, то вы, вероятно, можете настроить cookie-файл PHP, чтобы разрешить доступ с сервера поддоменов node.js. Но даже тогда я не знаю, поможет ли это вам. Вы серьезно усложнили ситуацию, используя здесь несколько серверных архитектур и нуждающихся в совместном использовании логинов между ними. – jfriend00

+0

@Piet - Можете ли вы сделать весь сервер только в одной системе, чтобы вам не приходилось делиться сеансами входа между серверами? socket.io может быть использован с PHP или node.js может сделать остальную часть вашего приложения. – jfriend00

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