Я создал сценарий сервера 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
@BenFortune - как создать websocket (ws), а не tcp socket? или сокет tcp может удовлетворить мои требования?
Для этого есть множество библиотек.
@BenFortune - Что я могу сделать, чтобы JavaScript взаимодействовал с TCP вместо создания веб-сокета с использованием сторонних библиотек.
Ничего такого. Браузеры обычно не поддерживают необработанные TCP-соединения с использованием JS. Вам нужна абстракция, поэтому существуют веб-сокеты.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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