@antonhot

Не могу достучаться до сокета на PHP. В чем может быть проблема?

Добрый день!
Пытаюсь разобраться с сокетами на PHP. Серверный скрипт запускаю через CLI. Сокет создается и ждет, но клиентская часть не может достучаться до него. Пользуюсь хостингом на яндекс cloud.
Подскажите, в чем проблема?

Скрипт сервера (запускаю через CLI)
set_time_limit(0);

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

define('ADDR', '0.0.0.0');
define('PORT', 889);

if (socket_bind($socket, ADDR, PORT)) {
    echo "Bind OK\n";
}

if (socket_listen($socket, 10)) {
    echo "Listen OK\n";
}

echo "Start server!\n";

while(true) {
    $accept = socket_accept($socket);
    if ($accept) {
        echo 'There are connection! Exit.\n';
        socket_close($socket);
        die;
    }
}


Скрипт клиента
$(document).ready(function() {
    console.log('start');
    // let socket = new WebSocket("ws://echo.websocket.org");
    let socket = new WebSocket("ws://127.0.0.1:889");
    console.log(socket);
    socket.onopen = function() {
        message('Соединение установлено');
        socket.send('Hello!');
    }

    socket.onclose = function() {
        message('Соединение зарыто');
    }

    socket.onerror = function(error) {
        message('Ошибка');
    }

    socket.onmessage = function(event) {
        message(event.data);
    }
})

function message(text) {
    $('#chat-result').append('<div>' + text + '</div>');
}


UPDATE
Попробовал через телнет:
telnet 127.0.0.1 889
Достучался. А вот через браузер не получается(

UPDATE
Вопрос решил!
Проблема была в том, что с того же хоста стучал.
Сейчас все ок.
5df16ad54f334390086113.jpeg
  • Вопрос задан
  • 287 просмотров
Пригласить эксперта
Ответы на вопрос 1
villiwalla
@villiwalla
HTML-верстка
Сокет и ВебСокет это разные сокеты! То что ты реализовал на бэкенде это работа с так называемыми unix-сокеты и они никакого отношения к ВебСокетам не имеют.

ВебСокет это улучшенный http протокол.
ВебСокет сервер должен реализовывать рукопожатие (hand snack), аналогично как протокол ssh когда используются ключи аунтефикации.

По твоему заходу на вебсокеты, я тебе советую взять готовую либу для пыха и реализации сокетов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы