mr_morfei
@mr_morfei
-

Как сменить client.id в node.js(soket.io)?

пример кода:
//тут какой то код...
io.sockets.on("connection", function (client)
{
//...
client.on("message", function (r)
         //...
	{  io.sockets.to(client.id).emit("message", b))
//тут какой то код...


Вопрос: как сменить (если возможно) client.id на реальный mysql.ID так чтобы потом работал emit ?

P.S. Но чувствую я одним местом что неправильно копаю, суть задачи такова: открываю 2, 3 вкладки в браузере с авторизованным одним и тем же юзером подключенным к soket.io, между пользователями отлично работает переписка, но когда я пишу сообщение, то оно приходит только в одну вкладку, остальные как я понимаю в дисконекте(вкладки), хотя юзер онлайн. Как объединить все вкладки и брузеры, любые IP, под одного юзера, так чтобы отправленное ему сообщение пришло во все "дыры" которые открыты от его mysql id ?

Вообщем люди добрые помогите мне, копать куда уже не знаю :(
  • Вопрос задан
  • 437 просмотров
Пригласить эксперта
Ответы на вопрос 1
art1z
@art1z
Программист-многостаночник в EffectiveSoft
client.id уникальный для каждого сервера ID сессии и в теории, при неправильной обработке disconnect, он может быть назначен совсем другому клиенту. В общем случае контролировать прямую связь soket.io client.id и ID клиента в базе - задача не из простых.
Намного проще хранить этот ID на клиенте (localStorage) и передавать его с каждым сообщением и поддерживать один актуальный маппинг MySQL ID <=> client.id в памяти сервера.

По поводу параллельно открытых вкладок проблема известная - браузеры по умолчанию могут держать 2-3 постоянно открытых коннекта (websocket) на один URL. Решается синхронизацией табов через localStorage: html5demos.com/storage-events
Или https://groups.google.com/forum/#!topic/socket_io/...,
или stackoverflow.com/questions/18654567/save-socket-i...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы