Рубрики
Uncategorized

Yii2-swoole-websocket, который поддерживает JSONRPC для доставки асинхронных задач работнику через WS, HTTP, Redis

Автор оригинала: David Wong.

https://github.com/immusen/yii2-свул-websocket

Пример:

Случай с комнатой чата, пример кода:/websocket/Контроллеры/Контроллер комнаты. PHP

Отправьте сообщение:

{
        "jsonrpc":"2.0",
        "id":1,
        "method":"room/msg",
        "params":{
            "id":"100111",
            "content":{
                "text":"Hello world!"
            }
        }
    }

Участники чата получают сообщения:

{
        "jsonrpc":"2.0",
        "id":1,
        "result":{
            "text":"Hello world!"
        }
    }

Развитие:

1. Создайте контроллер в каталоге websocket/контроллеры (или другие пути, просто измените конфигурацию пространства имен контроллера в config/main. php )

addFds($this->fd, $param_1);
          
          # Send information to the current websocket client
          $this->publish($this->fd, ['p1' => param_1, 'p2' => param_2]);
          
          # Remove all customer degrees FD from the collection
          $fds_array = $this->getFds($param_1);
          
          # Group messaging to clients in the collection
          $this->publish($fds_array, ['p1' => param_1, 'p2' => param_2]);
          
          # Operating redis through redis connection pool
          $this->redis->set($param_1, 0)
     }
     
     public function actionBaz()
     {
          //...
     }
}

2. Отправьте JSONRPC и укажите метод как “foo/bar” и передайте соответствующие параметры через параметры, чтобы вызвать вышеуказанные действия.

    {
        "jsonrpc":"2.0",
        "id":1,
        "method":"foo/bar",
        "params":{
            "param_1":"client_01",
            "param_2":100,
            "param_n":{
                "time":1551408888,
                "type":"report"
            }
        }
    }

Все вызовы RPC от клиента к серверу, в дополнение к клиентам websocket, также могут быть доставлены с помощью HTTP или публикации Redis. Эта функция может использоваться для веб-приложений Yii для доставки асинхронных задач Swool worker (например, обмен текстовыми сообщениями.). В примерах чата это можно сделать:

HTTP-запрос:

http://127.0.0.1:8721/rpc?p={"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"System warning!"}}}

Или redis-cli:

127.0.0.1:6379> publish rpc '{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"System warning!"}}}'

Или в веб-приложениях Yii

Yii:$app->redis->publish('rpc', '{"jsonrpc":"2.0","id":1,"method":"room/msg","params":{"id":"100111","content":{"text":"System warning!"}}}')

В ходе обновления мы можем продолжить добавлять сеанс http, аутентификацию, улучшать конфигурацию и упрощать механизм асинхронной доставки задач из веб-приложения в swool worker.