PHP-сервер websocket и соединение с JavaScript

Я создал сценарий сервера PHP websocket, как показано ниже.

$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_bind($socket, '127.0.0.1', 5001);
while (true) {
    $result = socket_listen($socket);
    $client =  socket_accept($socket);
    $input = socket_read($client, 1024);
    $output = 'Input Received: '.$input;
    socket_write($client, $output, strlen($output));
    socket_close($client);
}
socket_close($socket);

Я выполнил файл, содержащий вышеуказанный код, в терминале, используя следующую команду

$ php server.php

Теперь я хочу получить ответ в моем интерфейсе с помощью JavaScript. Я использовал следующий фрагмент JS, но не работал.

var ws = new WebSocket("ws://localhost:5001/echo");
ws.onopen = function() {
ws.send("Message to send");
    alert("Message is sent...");
};
ws.onmessage = function (evt) { 
    var received_msg = evt.data;
    alert("Message is received...");
};
ws.onclose = function() { 
    alert("Connection is closed..."); 
};

Получение следующей ошибки:

WebSocket connection to 'ws://localhost:5001/echo' failed: Error during WebSocket handshake: net::ERR_INVALID_HTTP_RESPONSE

Вы создали сокет TCP, а не веб-сокет. Это намного больше, чем это.

Ben Fortune 06.08.2018 09:40

@BenFortune - как создать websocket (ws), а не tcp socket? или сокет tcp может удовлетворить мои требования?

Pramod Kumar 06.08.2018 09:58

Для этого есть множество библиотек.

Ben Fortune 06.08.2018 10:10

@BenFortune - Что я могу сделать, чтобы JavaScript взаимодействовал с TCP вместо создания веб-сокета с использованием сторонних библиотек.

Pramod Kumar 06.08.2018 11:14

Ничего такого. Браузеры обычно не поддерживают необработанные TCP-соединения с использованием JS. Вам нужна абстракция, поэтому существуют веб-сокеты.

Ben Fortune 06.08.2018 11:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
6 159
1

Ответы 1

Для написания PHP-сервера websocket требуется выполнить определенное рукопожатие с клиентом, подключающимся к вам через ws: //. Кроме того, вам необходимо декодировать и кодировать входящие и исходящие сообщения. Настоящее веселье начинается, когда клиенты связываются с вами через wss: //, затем вам нужно позаботиться о сертификате и ключе на вашем PHP-сервере и использовать stream-io вместо socket-io и так далее и так далее. Вы можете взглянуть на мою реализацию всего этого и использовать ее как еще одну отправную точку.

https://github.com/napengam/phpWebSocketServer

Другие вопросы по теме