Невозможно подключить Javascript клиент к PHP серверу с помощью веб-сокетов - PullRequest
0 голосов
/ 03 мая 2020

У меня есть один PHP сервер, который прослушивает «сообщения» от некоторых удаленных PHP клиентов. После получения сообщения сервером сервер должен обновить GUI, используя javascript веб-сокеты на localhost. Сервер PHP правильно получает сообщения. Проблема в том, что когда сервер пытается отправить сообщение клиенту Javascript, я получаю сообщение об ошибке "Firefox не может установить sh соединение с сервером по адресу ws: //127.0.0.1: 6002 / «. и код ошибки 1006.

PHP Код сервера.

// socket used between PHP clients and PHP server
$srv_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($srv_socket, SOL_SOCKET, SO_REUSEADDR, TRUE);
socket_bind($srv_socket, "10.10.10.2", 6001);
socket_listen($srv_socket);

// socket used between PHP server and Web GUI (javascript)
$gui_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($gui_socket, SOL_SOCKET, SO_REUSEADDR, TRUE);
socket_bind($gui_socket, "127.0.0.1", 6002);
socket_listen($gui_socket);

while (TRUE) {

    // get message from PHP client
    $client_socket = socket_accept($srv_socket);
    $message = socket_read($client_socket, 250);
    socket_close($client_socket);
    if ($message != NULL) {

        echo "Message Received: " . $message . ".";

        // send message to GUI
        $gui_client_socket = socket_accept($gui_socket);
        socket_write($gui_client_socket, $message, strlen($message));
        echo "Message Sent to GUI.";

    }

}

Javascript Код клиента.

$(document).ready(function(){
    var socket = new WebSocket("ws://127.0.0.1:6002/"); 
    socket.onopen = function(ev) {
        alert('socket connection opened properly');
    };
    socket.onmessage = function(ev) {
        var message = ev.data;
        alert("message arrived!");
    };
    socket.onerror = function(error){
        alert("Error: " + error.message);
    };
    socket.onclose = function(ev){
        alert("Connection closed: " + ev.code);
    }; 
});

Вывод с сервера PHP Получено сообщение: {"msg": "Hello World!"}. Сообщение отправлено GUI.

Выходные данные от Javascript - это два предупреждения: 1-е предупреждение: «Ошибка: не определено» 2-е предупреждение: «Соединение закрыто: 1006»

Пожалуйста, обратите внимание Я использую Debian, и я сбросил свои iptables с iptables -F, а затем добавил два правила для портов 6001 и 6002.

iptables -A INPUT -p tcp -m tcp --dport 6001 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 6002 -j ACCEPT

ВАЖНО Я запускаю сервер PHP с терминала, а не с Apache. пример: php -q /var/www/html/php_server.php, в то время как Javascript клиент пытается открыть веб-сокет на ws: // localhost: 6002 /

Я что-то упустил? Я делаю что-то не так? В конечном итоге мне нужен клиент javascript для получения сообщения с сервера PHP. Любая помощь будет высоко оценена, спасибо.

1 Ответ

0 голосов
/ 03 мая 2020

Я нашел ответ. Мне не хватало заголовков рукопожатия при установке веб-сокета с клиентом Javascript. Пожалуйста, обратитесь к этому вопросу и найдите PHP - код сервера в вопросе; так как это правильный способ создать веб-сокет между Javascript клиентом и PHP сервером и решил мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...