Я хочу разработать чат с каналами в реальном времени, и это мои потребности:
- PHP-бэкэнд для управления сайтом
- Redis как первичное хранилище сессий и данных
- Pub / Sub для отправки сообщений только заинтересованным пользователям канала
- одно соединение WebSocket, с помощью которого сообщения будут отправляться и приниматься.
- (необязательно) NodeJS для использования отличных пакетов npm, таких как timesync или socket.io
Я вижу две разные архитектуры для достижения этой цели:
с Socket.io
с Crossbar.io
Это мои вопросы:
- Какую архитектуру выбрать и почему?
- Ключ в том, что идентификатор пользователя не может быть получен от клиента, потому что он может быть искажен. Итак, в первой архитектуре я думаю, что к каждому сообщению сокета я должен прикрепить значение PHPSESSID из файла cookie, а на стороне сервера получить сеанс PHP из Redis. Я прав или есть способ получить идентификатор пользователя лучше?
- Интересно, можно ли получить идентификатор пользователя во второй архитектуре по-другому?
Изменить:
Я выбрал Crossbar.io, потому что он очень мощный и позволяет общаться с множеством различных языковых приложений в реальном времени. Изучив примеры, я пришел к следующему:
При каждом входе в систему пользователь генерирует секретный ключ в базе данных.
Клиент PHP (Thruway) подключается к серверу Crossbar и регистрирует собственный аутентификатор WAMP-CRA
Браузер пользователя подключается к серверу Crossbar и получает запрос. Секрет и auth_id (идентификатор пользователя) загружаются из БД при загрузке страницы, поэтому он может выполнить запрос и отправить ответ.
Поиск аутентификатора PHP в БД для пользователя с предоставленным секретом и идентификатором, равным auth_id. Если есть, то он успешно аутентифицирует сеанс. Теперь мы можем быть уверены, что auth_id - это настоящий идентификатор пользователя.
Это мой вопрос:
Как я могу получить auth_id при подписке?
Я также добавил аутентификацию cookie, и браузер запоминается после аутентификации. Но когда я смотрю в Chrome DevTools, в локальном хранилище нет файлов cookie или значений. Даже после очистки кеша мой браузер все еще запоминается Crossbar. Интересно, как это возможно?
Edit2:
Может быть, меня неправильно поняли, но главный вопрос заключался в выборе подходящей архитектуры и получении доверенного идентификатора пользователя. Не было никакого внимания, поэтому я назначил награду, и после этого меня проголосовали против. Я много читал о приложениях реального времени и, наконец, решил использовать Crossbar.io, поэтому отредактировал вопрос, чтобы он был связан с ним. Потом люди начали голосовать, предлагая другие архитектуры, но не отвечая на мои вопросы. В конце концов, я сам это сделал и представил свой ответ.