powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / websocket через некоторое время почему-то замолкает
10 сообщений из 10, страница 1 из 1
websocket через некоторое время почему-то замолкает
    #39809387
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Кто работал с websocket подскажите пжлста почему он может через некоторое время просто замолкать, и где (или как) можно отыскать быстро где кроется ошибка. Система простая: взял ratchet, поставил его через композер к yii2 (пакет cboden/ratchet), запилил консольный контроллер вот с таким содержанием:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<?php

namespace app\modules\chat\controllers;

/**
 * Консольный контроллер модуля чатов
 *
 * @author programer
 */
class CommandsController extends \yii\console\Controller{
    
    /**
     * Сервер websocket чатов
     */
    public function actionSocketServer()
    {
        $server = \Ratchet\Server\IoServer::factory(
            new \Ratchet\Http\HttpServer(
                new \Ratchet\WebSocket\WsServer(
                    new \app\modules\chat\servers\ChatServer()
                )
            ),
            8080
        );
        $server->run();
    }

}



Ну и собственно сам ChatServer, в котором по onMessage происходит обработка полученной команды (например подписка на отслеживание чата) и при необходимости рассылка результата её выполнения всем подписанным на эту рассылку клиентам.

и вот некоторое время это всё чудо прекрасно работает (наверное несколько часов где-то, точно время падения определить не удалось), а через некоторое время сервер просто замолкает, то есть коннекты принимает, сообщения принимает, но в ответ на них ничего не шлёт, и рассылки по клиентам не производит. Разумеется сам процесс висит себе спокойно и никто его не режет.

Что это вообще может быть, и куда можно посмотреть, чтобы хоть немного приблизиться к решению этой проблемы, а то скоро проект сдавать, а у меня одна из самых важных его частей каждых несколько часов просто отваливается :)
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39869596
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр,

Поздно увидел топик, но отвечу.
Никогда ты не найдешь идеальную реализацию websocket на php. Всегда надо допиливать.
Ratchet: 4Мб кода, 1000 файлов с зависимостями. Лучше самому писать по RFC. Ratchet нужно юзать, где сервак с движком на рэтчет.
Код с нуля 4 файла - 10кб, никаких зависимостей. Работает в 90% случаев. Остальное допилить налету легко.
Вот аналог твоего кода, сравни:
Код: php
1.
2.
3.
4.
require 'class_websocketserver.php';
define('websocket_port', 8080);
websocketserver();
/* Всё! :) */


Ничего не замолкает 365 дней в году.

Либо так
Код: php
1.
2.
3.
4.
5.
6.
7.
require 'class_websocketserver.php';
$w = new c_websocketserver(8080);
while (true) {
    $client = $w->read();
    foreach ($client as $id=>$data)
        $w->send($id, 'Hello!');
}


Там же содержится класс клиента.
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39869702
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TolikD,

> Никогда ты не найдешь идеальную реализацию websocket на php

можно было ничего больше не писать
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39872065
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений,

Да ну! Не в этом дело. Основная мысль была - надо писать с нуля.
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39872217
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TolikD,

ну так и за чем
напишешь все с нуля, окажется что получил сферический вебсокетый сервер в вакууме
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39873585
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дегтярев Евгений,

Это ты к чему? К тому что серв с нуля не прикуришь к фреймворку? Или к тому, что с ним чат не заработает? (хотя мой класс по дефолту - чат)
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39873688
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема решилась )) это просто я тупой, с этим вэбом отвык от нормальных вещей типа слежения за таймаутами соединений и утечками ресурсов :))
Всё оказалось крайне просто - у меня mysql соединение по таймауту закрывал, вот и падало всё. Проблема решилась следующим кодом в начале метода onMessage:
Код: php
1.
2.
3.
4.
5.
6.
        try {
            \Yii::$app->db->createCommand("DO 1")->execute();
        } catch (\Throwable $e) {
            \Yii::$app->db->close();
            \Yii::$app->db->open();
        }



Теперь всё работает стабильно как часики (вот щас пошёл проверить на всякий случай, чат крутится уже неделю и всё ок). Теперь только осталось на высоких нагрузках его погонять :)
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39874125
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр,

Хорошо, что разобрался сам. Но не лучше ли было выставить ini_set('mysql.connect_timeout','0');
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39877024
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TolikD, очень хотелось, чтобы система умела сама обрабатывать такие ситуации :) Всё-таки чем меньше зависимостей от окружения, тем меньше вероятность, что что-то пойдёт не так.
...
Рейтинг: 0 / 0
websocket через некоторое время почему-то замолкает
    #39877828
TolikD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр,
Моё мнение, что это всё же костыль. Надо предусматривать внештатные ситуации и прописывать их до появления исключения.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / websocket через некоторое время почему-то замолкает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]