Когда между клиентом и сервером установлено первоначальное соединение, socket.client.id на сервере и socket.id на стороне клиента одинаковы, но когда я обновляю страницу клиента, идентификатор клиента меняется на другой, но на сервере он все тот же. Делает ли это какие-либо проблемы
Клиентское значение socket.id
устанавливается на объекте сокета клиента после получения события connect
и обновляется (например, изменяется) после события reconnect
.
Похоже, что инфраструктура socket.io сохранит их одинаковыми на клиенте и сервере. Если клиент отключается, а затем повторно подключается, будет новое соединение с новым идентификатором как на клиенте, так и на сервере. Возможно, вы пытаетесь повесить на старый объект сокета на сервере после того, как клиент отключил его (мы не можем увидеть достаточно кода вашего сервера, чтобы оценить это).
При первоначальном установлении соединения сокет передает сообщения, используя socket.emit () с сервера, и получает как socket.on () на клиенте. Но когда я пытаюсь передать что-либо из клиента, оно не будет получено на сервере.
Вы должны показать нам воспроизводимый случай. Этого не происходит, если вы правильно кодируете вещи. Я полагаю, что у вас нет подходящих слушателей для сообщений в правом сокете, чтобы видеть сообщения, которые вы отправляете. Я обещаю вам, что отправка сообщения с клиента на сервер работает нормально, если все реализовано правильно.
Общий комментарий о вашем коде. Оба кодовых блока, которые вы показываете, по-видимому, вставляют объект socket
в переменную с более высокой областью действия (или, возможно, даже глобальную). Вероятно, это одна из причин вашей проблемы, потому что этот объект сокета может стать мертвым, если клиент по какой-либо причине переподключится. Кроме того, помещение любого типа объекта сокета в глобальную переменную или переменную уровня модуля делает ваш сервер способным обслуживать только одного клиента - это просто не то, как вы проектируете многопользовательские серверы.