Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136

Сервер socket на nodejs

04.06.2021, 03:48. Показов 782. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не могу разобраться в структуре массивов socket, sockets. Как должно: при подключение отправляется user_nick. Может быть в разных браузерах/вкладках одинаковый user_nick. При отправки сообщения отправляется user_from равный user_nick, а так же user_to. Сервер должен взять и user_from и user_to послать только им сообщение включая отправляющего. Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2021, 03:48
Ответы с готовыми решениями:

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование сокетов и андроид клиент отправки сокет. Но...

Прокси Socket.IO NodeJS
Всем доброго времени суток! Необходимо реализовать следующие: (картинка в аттаче) Другими словами нужно сделать локальный прокси сервер...

Чат на nodejs + socket.io
Всем привет, возникла необходимость сделать простенький чатик. Решил сделать на nodejs немного погуглив нашел socket.io и на их же сайте...

6
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
05.06.2021, 23:27
Сокеты - это просто "налаженный канал". В нем нет механизма авторизации! В "чистом" сокете нет даже механизма пере-подсоедиенения в случае потери связи. Поэтому я перешел на socket.io (НАДстройка над сокетами с кучей "плюшек").

В момент подключения клиента к серверу сервер может перейти в режим ожидания определенных данных, а клиент сразу после подключения может отправить серверу ник/пароль. Если сервер принял эту "пару" и проверил правильность, он может прописать ее себе вместе с ID "канала". Или можно попробовать прямо в объект сокет-пользователя на стороне сервера добавить дополнительные поля. Если сервер принял "левый" пароль, он разрывает канал или отсылает сообщение "неизвестный пользователь" и переводит канал в "игнорируемые".

В случае потери соединения надо повторно высылать ник-пароль. Для упрощения сервер иногда выдает таким пользователям уникальный "токен авторизации" под компьютер/браузера.

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

(больше года в потрохах сокетах не копался - мог немного ошибиться, но когда-то сам подобную систему авторизации писал)
0
123 / 98 / 15
Регистрация: 02.02.2014
Сообщений: 346
06.06.2021, 01:02
Цитата Сообщение от andyj Посмотреть сообщение
В случае потери соединения
я для этого к socket.io сессии прикручивал. правда там разбираться прилично пришлось
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
06.06.2021, 09:53  [ТС]
andyj, Вы меня совсем не поняли. Авторизация тут совсем не при чём. Может коряво описал.
0
416 / 307 / 113
Регистрация: 28.08.2013
Сообщений: 832
06.06.2021, 14:42
HotReboot, На сервере, на событие "connection" генертиуй id и отправь его обратно подключившимуся. Этот же id добавь к объекту socket. Когда клиент получит id запроси список подключённых клиентов, плюс дополнительно сделай рассылку по всем клиентам о подключении нового клиента. Когда клиент о правляет сообщение другт у клиенту, то в сообщении добавляются id от кого и кому. Сервер получив такие сообщение ищет в массиве клиентов id получателя, найдя отправлет.
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
06.06.2021, 17:16  [ТС]
kidASM, Я примерно так делал. Только чуть проще. Мне незачем сообщать всем о новом клиенте. Но загвоздка была отправить конкретному пользователю по нику (а одинаковых ников может быть несколько). Все советы типа io.sockets.connected[id].emit..., io.sockets.sockets[id].emit..., io.sockets.client[id].emit... не приводили к нужному результату и я уже отчаялся поэтому написал сюда, но в конце концов нашёл рабочий io.to(id).emit...
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
06.06.2021, 19:49
Цитата Сообщение от HotReboot Посмотреть сообщение
Может коряво описал.
Проще читается если писать "в несколько строк". После "посылается user_nick понял что нужна авторизация и дальше "через слово" читал "уточнения".

Но основа ответа не поменялась.
Есть два подхода! На стороне сервера либо
1) создаем отдельную таблицу связок -"user_сокет_ID"
2) пробуем дополнить прямо объект сокет-клиента (не уверен что получится, но если выйдет - код в разы проще)
...в каждого сокета добавляем его user_nick

При рассылке производим "перебор" сокетов. При переборе, получая каждый item сокета проверяем "какой у него ник" и либо шлем ему, либо игнорируем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2021, 19:49
Помогаю со студенческими работами здесь

Nodejs + socket.io полёт снаряда
В игре персонаж может стрелять. Но снаряд летит не мгновенно и по кривой траектории. Как лучше рассчитывать его месторасположение? На...

Nodejs + Socket.Io Безопасное Подключение
Есть сервер Nodejs который слушает порт по Socket.io var io = require('socket.io').listen(8300); И есть скрипт на сайте main.js который...

Новичок Nodejs как на хостинге запустить сервер?
Доброго времени суток! Я чайник и только начал изучать Nodejs. Ситуация такая у меня есть под домен на платном хостинге. Хочу...

Можно ли интегрировать nodejs сервер на готовый сайт?
Добрый день! Не уверен что правильно выразился в заголовке темы... Вот только закончил изучение базовых принципов работы node.js. Меня...

Мне необходимо отправить данные из формы ajax запросом на сервер на nodejs
<!DOCTYPE HTML> <html> <head><meta charset="utf-8"></head> <body> <form> <input name="asd" id="name"> <input...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru