#2 Laravel:棘轮-WebSocket。制作按键



学习在Laravel中使用套接字。延续性
推送-从服务器向客户端发送数据;棘轮-WebSocket / http://socketo.me/
✔VK项目团队:https://vk.com/simple_training
✔订阅频道:http://goo.gl/BUR12H
✔作者的网站:http://simple-training.com/
✔http://zeromq.org/area:下载
✔http://reactphp.org/

39 comments
  1. А есть ли какие нибудь преимущества перед NodeJs? Тоже сейчас хочу все что бы в рамках одного языка работало, но чет мне кажется это не очень верный путь

  2. privet 1 vopros mojnoli napisat backend dlya online igri takim obrozom otpravki kordinak x.y.z + id predmetov + animatsiya derjit li laravel takiye nagruzki tochney php 🙂

  3. Спасибо большое! Удалось реализовать на Symfony 4.1. Не без правок, конечно, в силу того, что пакеты обновились.

  4. Для тех, кто использует новую версию react и при запуске сервера получает ошибку с сообщением о недостаточном количестве аргументов:

    Создавайте экземпляр сервера следующим образом:

    $webSocket = new ReactServer('127.0.0.1:9502', $loop);
    где первый параметр – string с адресом:портом вашего сервера websocket

    + метод ReactSocketServer::listen() стоит опустить, так как он ликвидирован

  5. Спасибо за туториал. Благодаря тебе я сумел создать систему оповещения для менеджеров о новом заказе

  6. Все хорошо, огромное спасибо за труд. Взяв это видео за основу, развернул web socket в своем приложении на Yii2. Только одно маленькое пожелание/вопрос: почему вы работаете под windows? Под линуксом все намного проще и стабильней. Например, установка расширений php. Не надо ничего никуда раскладывать (в нужные папки), просто пишем sudo apt install php-zmq. Не надо ломать голову работает у вас web socket, или нет. Согласно ману http://socketo.me/docs/deploy запускаем push server c помощью supervisor и забываем о нем.

  7. Попытался реализовать на yii при попытке запустить сервер выдает.
    PHP Warning 'yiibaseErrorException' with message 'Missing argument 1 for yiibaseController::__construct(), called in C:OpenServerdomainscrmasconsolecontrollersPusherContro
    ller.php on line 36 and defined'
    in C:OpenServerdomainscrmasvendoryiisoftyii2baseController.php:82
    Если добавить parent::__construct($this->id,$this->module); то выдает
    PHP Fatal Error 'yiibaseErrorException' with message 'Call to a member function getUniqueId() on null'

    in C:OpenServerdomainscrmasvendoryiisoftyii2baseController.php:328
    Может кто сталкивался ?

  8. Что, вот так просто? А как же Vue, Node и Npm пророк его?
    Как же куча хз как 'просто работающего вывернутого' JS?

    Остались что ли здравомыслящие люди?

  9. при попытке запустить сервер, выдает ошибку Type error: Too few arguments to function ReactSocketServer::__construct(), 1 passed in /home/vagrant/code/kodo-crm/app/Console/Commands/PushServer.php on line 56 and at least 2 expected

    на строчке $web_sock = new ReactServer($loop);

    не подскажете, в чем может быть проблема? может в Ларе 5.6 уже что-то сильно поменялось? или я дурак?

  10. Ставил и настраивал 2 месяца назад на локалке (Win7 + XAMPP + PHP5.6) все работало и работает по сей день. Вчера развернул на серваке (Debian9 + Apache2 + PHP7.0) этот же проект и появилась трабла:
    Сокет тупо молчит. Запускаю его в консоли, в ответ он мне сообщает, что все норм, запустился. Но при коннекте клиента ничего не происходит. Более того, у клиента в браузерной консоли также нет ошибок об отсутствующем соединении, т.е. якобы все норм.

    Не знаю уже что делать, может с портами что не так? Возможно у кого-то есть мысли, куда хоть копать.

  11. Дмитрий. Как передать всем клиентам не текст как в чате, а перенаправить по указанной ссылке?

  12. после команды php artisan socketpush:serve
    вижу такую ошибку.. подскажте пожалуйста в чём может быть проблема ?
    Class 'RatshetServerIoServer' not found

  13. Здравствуйте , Дмитрий . А как сделать так , чтобы сервер из консоли запускался автоматически при загрузке сайта ? Обязательно ли писать для этого сетевого демона?

  14. Спасибо за видео. Сделал все на VPS хостинге (Ubuntu). Даю по SSH команду "php artisan socketpush:serve". Все отлично работает. Закрываю SSH клиент (PHPStorm или Putty). Все перестает работать. Как сделать что-бы на хостинге соккеты работали постоянно, в не зависимости от SSH соединения с моим компом.

  15. Попробовал сделать push-уведомления через технологию long-polling и socket.io. От первого к сожалению пришлось отказаться, т.к. используется бесконечный цикл на PHP, что дико отжирает память на проекте средней величины (сервер Apache). А второй способ (socket.io) – это тема! Реализуется элементарно просто, вот тут рабочий пример – https://www.youtube.com/watch?v=54yhqN3ITEQ Проще некуда, реально. Недостаток – нужно привязывать ноду к проекту

  16. как жаль что урок бесполезен для маководов, т.к. собрать там 0mq еще те пляски с бубном (у меня так и не вышло). все таки redis или beanstalkd гораздо проще

  17. Есть где-нибудь исходный код? Перепечатал код с видео. Jetbrains не ругается, но в браузер не приходят данные.

  18. Хорошое видео. Но у меня вопрос, если делать на NodeJs то там есть Forever чтобы держать сервер запущеным после закрытия консоли, а как тут такое сделать? Ведь после закрытия консоли закроеться и сервер.

  19. Огромное спасибо за познавательное видео!
    но есть момент! уже на финише, клиент просто не хочет принимать (пуллить) отосланный массив с сервера! Изначально я реализовывал это на YII2, результат- тишина. Потом поставил все на Laravel и то же самое! Думаю это проблема с ext zmq.dll, поскольку в методе sentDataToServer(array $data), добавил return $socket, потом $callback= AppClassesSocketPusher::sentDataToServer($message) дампит пустой объект object(ZMQSocket)#114 (0) { } следовательно бродкастить клиенту то нечего! вот такая проблема, если кто сталкивался поделитесь плыз опытом, а то придется забить на Ratchet! (ps на клиенте подписан на одинаковый с сервером топик, so that is not an issue)

  20. Спасибо, за видео, особенно за первое.
    Есть еще один способ как сделать Push с сервера, при этом оставив код из первого видео.
    И я думаю он будет проще, т.к. не нужно будет устанавливать php-расширений и можно оставить код из 1-го видео. (там реально намного проще, как на сервере, так и на клиенте)

    Идея в том, чтобы подключиться к серверу WS с помощью того же php, и чтобы Ratchet распознал, что это подключился на самом деле сервер.
    Например, сделаем при помощи библиотеки https://github.com/Devristo/phpws

    $loop = ReactEventLoopFactory::create();
    $logger = new ZendLogLogger();
    $writer = new ZendLogWriterStream("php://output");
    $logger->addWriter($writer);

    $client = new DevristoPhpwsClientWebSocket("ws://0.0.0.0:8888/param", $loop, $logger);

    $client->open();
    $loop->run();

    А в Ratchet в методе onOpen отследим hostname и path
    $host = $conn->WebSocket->request->getHost();
    $path = $conn->WebSocket->request->getPath();

    Если $host === '0.0.0.0' – значит это сервер
    (на боевом сервере в $host должен быть домен)
    и дальше, допустим из $path, достаем метод, который нужно выполнить, или какие-нибудь данные
    и вызываем этот метод/рассылаем данные или делаем что-нибудь еще.

    Надеюсь кому-нибудь пригодится

  21. PhpStrom ругается – "Undefined class ZMQContext", хотя расширение установленно и всё сделано по инструкции. Push сервер стартует и сразу выключается (без ошибок). В чём может быть проблема?

    ЗЫ. Прочекал phpinfo(), zmq работает, а вот IDE всё равно ругается, мистика какая-то.

  22. Дмитрий, спасибо. Думал, что видео ответит на терзающий меня вопрос, но нет)
    Вопрос такой: как сделать и получение сообщений от клиента (как в предыдущем уроке), и отправку по крону через один класс вебсокета? Т.е. например, есть чат, сообщения пихаются в этот сокет и рассылаются всем участникам или определенному, если это приватное сообщение. Но если вдруг сработал cron job, нужно всем или группе людей отправить сообщение? Допустим, сервер будет перезагружен через 10 минут.
    Пример напоминает сферического коня в вакууме, но, я думаю, всё понятно)
    Клиента делаю на android с помощью autobahn, сервер на ratchet с самописным движком, это игра, 2 соединения устанавливать не хочется, да и будет много костылей при передаче данных между этими соединениями

  23. У кого проблема с ошибкой: Warn­ing: stream_select(): can­not rep­re­sent a stream of type ZMQ_FD as a select()able descriptor нужно переустановить сервер под 32 бита (Apache и PHP), если вы на Windows работаете. Я ставил PHP 5.6.8 TS. Проблема решилась. Скачать ZMQ на сайте не получилось, или я не разобрался как, скачал здесь https://pecl.php.net/package/zmq/1.1.2/windows а также действовал по инструкции http://superuser.com/questions/585291/installing-zeromq-on-windows-7-wamp-server#answer-774973

  24. Пара замечаний:
    1. установить тот же redis не сложнее установки расширения для 0mq. А используя докер или вагрант это вообще элементарно
    2. Прежде чем запускать 0mq в продакшен нужно тщательно её изучить, ибо можно пройтись по многим забавным граблям

Comments are closed.