zoukankan      html  css  js  c++  java
  • yii2扩展 基于swoole的websocket开发直播间demo案例

    Yii2 WebSocket
    
    即时通讯Demo
    问题反馈
    
    在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
    
    QQ群:655084090
    前提
    
    服务器安装swoole
    
     git clone https://github.com/swoole/swoole-src.git
     cd swoole-src
     phpize
     ./configure --enable-openssl -with-php-config=[PATH] #注意[PATH]为你的php地址 开启ssl用
     make && make install
    
    安装
    
    composer执行
    
    composer require "jianyan74/yii2-websocket"
    
    或者在 composer.json 加入
    
    "jianyan74/yii2-websocket": "^1.0"
    
    配置
    
    在 common/config/main.php 加入以下配置
    
       'redis' => [
           'class' => 'yii
    edisConnection',
           'hostname' => 'localhost',
           'port' => 6379,
           'database' => 0,
       ],
    
    在 console/config/main.php 加入以下配置。(注意:配置在controllerMap里面)
    
    // webSocket
    'websocket' => [
       'class' => 'jianyanwebsocketconsoleWebSocketController',
       'server' => 'jianyanwebsocketserverWebSocketServer', // 可替换为自己的业务类继承该类即可
       'host' => '0.0.0.0',// 监听地址
       'port' => 9501,// 监听端口
       'type' => 'ws', // 默认为ws连接,可修改为wss
       'config' => [// 标准的swoole配置项都可以再此加入
           'daemonize' => false,// 守护进程执行
           'task_worker_num' => 4,//task进程的数量
           // 'ssl_cert_file' => '',
           // 'ssl_key_file' => '',
           'pid_file' => __DIR__ . '/../../backend/runtime/logs/server.pid',
           'log_file' => __DIR__ . '/../../backend/runtime/logs/swoole.log',
           'log_level' => 0,
       ],
    ],
    
    使用
    
    # 启动 
    php ./yii websocket/start
    # 停止 
    php ./yii websocket/stop
    # 重启 
    php ./yii websocket/restart
    
    测试
    
    <script>
        var wsl = 'ws://[to/your/url]:9501'; // 如果是wss的改成wss://[to/your/url]:9501
        ws = new WebSocket(wsl);// 新建立一个连接
        // 如下指定事件处理
        ws.onopen = function () {
            var login_data = '{"type":"login","nickname":"隔壁老王","head_portrait":"123","room_id":10001}';
            ws.send(login_data);
        };
        // 接收消息
        ws.onmessage = function (evt) {
            console.log(evt.data);
            /*ws.close();*/
        };
        // 关闭
        ws.onclose = function (evt) {
            console.log('WebSocketClosed!');
        };
        // 报错
        ws.onerror = function (evt) {
            console.log('WebSocketError!');
        };
        
        // 聊天
        function say(msg){
            if(msg){
                var data = '{"type":"say","to_client_id":"all","content":'+ msg +'}';
                ws.send(data);
            }
        }
    </script>
    
    接口文档
    
        发送消息的格式全部以json字符串发过来
    
    心跳
    
    请求地址
    
    ws://[to/you/url]:9501
    
    参数
    参数名     说明
    type     pong
    
    无返回
    进入房间
    
    请求地址
    
    ws://[to/you/url]:9501
    
    参数
    参数名     说明
    type     login
    room_id     房间id
    user_id     用户id
    nickname     用户昵称
    head_portrait     用户头像
    
    返回(1)
    
    {
      "type":"login",
      "from_client_id":2,
      "to_client_id":"all",
      "time":"2018-04-10 16:41:29",
      "count":"1",
      "member":{
        "fd":2,
        "room_id":10001,
        "user_id":1,
        "nickname":"隔壁老王",
        "head_portrait":"123"
      }
    }
    
    返回(2)
    
        当前登录的人还会返回一个在线列表
    
    {
      "type":"list",
      "from_client_id":2,
      "to_client_id":2,
      "time":"2018-04-10 16:41:29",
      "list":[{
           "fd":2,
           "room_id":10001,
           "user_id":1,
           "nickname":"隔壁老王",
           "head_portrait":"123"
         }]
    }
    
    发言
    
    请求地址
    
    ws://[to/you/url]:9501
    
    参数
    参数名     说明
    type     say
    to_client_id     对谁说话:默认 all
    content     内容
    
    返回
    
    {
      "type":"say",
      "from_client_id":2,
      "to_client_id":"all",
      "time":"2018-04-10 16:43:00",
      "content":"123"
    }
    
    送礼物
    
    请求地址
    
    ws://[to/you/url]:9501
    
    参数
    参数名     说明
    type     gift
    gift_id     礼物id
    
    返回
    
    {
        "type": "gift",
        "from_client_id": 4,
        "to_client_id": "all",
        "gift_id": "礼物id",
        "time": "2018-03-06 11:27:15"
    }
    
    离开房间
    
    请求地址
    
    ws://[to/you/url]:9501
    
    参数
    参数名     说明
    type     leave
    
    返回
    
    {
        "type": "leave",
        "from_client_id": 1,
        "to_client_id": "all",
        "count": 2,
        "time": "2018-03-06 11:27:15"
    }
  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/wangrongjie/p/12427673.html
Copyright © 2011-2022 走看看