Как на Socket сервере создавать подключения?
Запускаю сокет сервер
require('net').createServer(function (socket) { console.log("connected"); socket.on('data', function (data) { console.log(data.toString()) }); }) .listen(8082) |
require('net').createServer(function (socket) { console.log("connected"); socket.on('data', function (data) { console.log(data.toString()) }); }) .listen(8082)
На клиенте подключаюсь к серверу
const connection = new WebSocket("ws://localhost:8082"); connection.onopen = (event) => { console.log("Connection opened"); } connection.onerror = (error) => { console.log(`WebSocket Error: ${error}`); } connection.onclose = (event) => { console.log("Connection closed"); } |
const connection = new WebSocket("ws://localhost:8082"); connection.onopen = (event) => { console.log("Connection opened"); } connection.onerror = (error) => { console.log(`WebSocket Error: ${error}`); } connection.onclose = (event) => { console.log("Connection closed"); }
В консоли спустя время выдает ошибку
(index):14 WebSocket connection to 'ws://localhost:8082/' failed: (anonymous) @ (index):14 (index):21 WebSocket Error: [object Event] (index):25 Connection closed |
(index):14 WebSocket connection to 'ws://localhost:8082/' failed: (anonymous) @ (index):14 (index):21 WebSocket Error: [object Event] (index):25 Connection closed
Сервер выдает сообщение, что запрос пришел
connected GET / HTTP/1.1 Host: localhost:8082 Connection: Upgrade Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Upgrade: websocket Origin: http://localhost:3000 Sec-WebSocket-Version: 13 Accept-Encoding: gzip, deflate, br, zstd Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: PHPSESSID=1f3q4fo3pa47rfn3204gmuh49c; refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MywibmFtZSI6IkFuZHkiLCJyb2xlIjpudWxsLCJpYXQiOjE2OTg3NjQ5MzIsImV4cCI6MTY5ODc2NTIzMn0.vjFNp6NuhHi8L21ScUdP3u2w54WBnqhbSxk62XT7q08; PGADMIN_LANGUAGE=en; refresh_token_id=1; refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoyLCJ1c2VyX25hbWUiOiJBbmR5IiwidXNlcl9yb2xlIjpudWxsLCJpYXQiOjE3MDMzNjYyMDcsImV4cCI6MTcwMzM2NjUwN30.eaXslNhLFnw7ATAODKaLV0tJ-XsDRLs2neRyUCjcP7k; JSESSIONID.e55f81e7=node01gnf5p7uf1nqeiirhtgjoyp2u2.node0; screenResolution=1707x1067 Sec-WebSocket-Key: Z+4qaiYP9hb8IXlawapVEQ== Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits |
connected GET / HTTP/1.1 Host: localhost:8082 Connection: Upgrade Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Upgrade: websocket Origin: http://localhost:3000 Sec-WebSocket-Version: 13 Accept-Encoding: gzip, deflate, br, zstd Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: PHPSESSID=1f3q4fo3pa47rfn3204gmuh49c; refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MywibmFtZSI6IkFuZHkiLCJyb2xlIjpudWxsLCJpYXQiOjE2OTg3NjQ5MzIsImV4cCI6MTY5ODc2NTIzMn0.vjFNp6NuhHi8L21ScUdP3u2w54WBnqhbSxk62XT7q08; PGADMIN_LANGUAGE=en; refresh_token_id=1; refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoyLCJ1c2VyX25hbWUiOiJBbmR5IiwidXNlcl9yb2xlIjpudWxsLCJpYXQiOjE3MDMzNjYyMDcsImV4cCI6MTcwMzM2NjUwN30.eaXslNhLFnw7ATAODKaLV0tJ-XsDRLs2neRyUCjcP7k; JSESSIONID.e55f81e7=node01gnf5p7uf1nqeiirhtgjoyp2u2.node0; screenResolution=1707x1067 Sec-WebSocket-Key: Z+4qaiYP9hb8IXlawapVEQ== Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Но почему на клиенте не создалось соединение и как его создать?
Есть книга или статья, где с нуля описывается принцип работы сокет сервера на Node?
Дополнительно:
Эти базовые вещи легко гуглятся, всё есть в доках, тут не нужны статьи, а тем более книги. Освой уже наконец гугл, раз доки лень читать.
Сокет и веб-сокеты - это разные вещи. Сокет - это системный интерфейс, а веб-сокеты - это протокол поверх TCP-IP сетевого соединения, а на уровне системы все соединения создаются через интерфейс под названием "Сокет". Так что либо вам на сервере надо использовать не сокет-сервер, а веб-сокет сервер, либо на клиенте подключаться используя сокет, а не веб-сокет. Спецификации веб-сокет протокола находятся здесь: https://datatracker.ietf.org/doc/html/rfc6455
- При поиске веб сокет вылетают только node js пакеты WS или SocketIO
А как реализуется нативный веб сокет сервер?Мне казалось через пакет net, как нашел пример из документации
Но я не нашел, как там создавать подключения от клиентов
Приходит только хттп запрос на подключение, но клиент не подключаетсяКаким образом реализуется подключения клиентов к серверу?
- Судя по всему вы либо не прочитали мой ответ либо не поняли его.
При поиске веб сокет вылетают только node js пакеты WS или SocketIO
Значит плохо ищете или не умеете искать.
А как реализуется нативный веб сокет сервер?
Согласно спецификации. Если прочитаете мой ответ - легко её найдете.
Мне казалось через пакет net
Да, для написания веб-сокет сервера или клиента естественно потребуется net пакет, т.к. он реализует обертку над системными интерфейсом типа сокет.
Приходит только хттп запрос на подключение, но клиент не подключается
Все правильно приходит. Конечно, клиент не сможет подключиться, ведь ваш сервер только и выводит этот запрос на подключение и больше ничего не делает.
Каким образом реализуется подключения клиентов к серверу?
Опять же все согласно спецификации. Там все подробно написано.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для создания подключений на Socket сервере в PHP можно воспользоваться функциями из расширения sockets. Ниже приведен пример кода, демонстрирующий создание подключения на Socket сервере: