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"
    }
  • 相关阅读:
    安裝Node.js
    es match、match_phrase、query_string和term的区别
    ES系列十、ES常用查询API
    ElasticSearch 入门总结
    起立,老师好
    像哆啦A梦懂大雄一样懂客户,我们也会拥有百宝箱
    阿里云居然在偷偷发福利!
    别人家的公司又来了,这次竟然开起了演唱会
    听说国家博物馆收藏了一行代码 ???
    我还是那个我,为啥就被老板区别对待了呢?
  • 原文地址:https://www.cnblogs.com/wangrongjie/p/12427673.html
Copyright © 2011-2022 走看看