{"id":21517624,"url":"https://github.com/jianyan74/yii2-websocket","last_synced_at":"2025-06-26T10:03:41.916Z","repository":{"id":56998871,"uuid":"123241084","full_name":"jianyan74/yii2-websocket","owner":"jianyan74","description":"基于swoole的websocket","archived":false,"fork":false,"pushed_at":"2018-05-28T08:29:19.000Z","size":20,"stargazers_count":34,"open_issues_count":1,"forks_count":21,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-10T05:02:19.643Z","etag":null,"topics":["php","swoole","websocket","yii2","yii2-websocket"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jianyan74.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-28T06:36:13.000Z","updated_at":"2024-05-09T10:10:04.000Z","dependencies_parsed_at":"2022-08-21T11:10:13.644Z","dependency_job_id":null,"html_url":"https://github.com/jianyan74/yii2-websocket","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/jianyan74/yii2-websocket","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jianyan74%2Fyii2-websocket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jianyan74%2Fyii2-websocket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jianyan74%2Fyii2-websocket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jianyan74%2Fyii2-websocket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jianyan74","download_url":"https://codeload.github.com/jianyan74/yii2-websocket/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jianyan74%2Fyii2-websocket/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262044434,"owners_count":23249748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php","swoole","websocket","yii2","yii2-websocket"],"created_at":"2024-11-24T00:43:52.024Z","updated_at":"2025-06-26T10:03:41.899Z","avatar_url":"https://github.com/jianyan74.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Yii2 WebSocket\n\n即时通讯Demo\n\n### 问题反馈\n\n在使用中有任何问题，欢迎反馈给我，可以用以下联系方式跟我交流\n\nQQ群：[655084090](https://jq.qq.com/?_wv=1027\u0026k=4BeVA2r)\n\n### 前提 \n\n服务器安装swoole\n\n```\n git clone https://github.com/swoole/swoole-src.git\n cd swoole-src\n phpize\n ./configure --enable-openssl -with-php-config=[PATH] #注意[PATH]为你的php地址 开启ssl用\n make \u0026\u0026 make install\n ```\n### 安装\n  \ncomposer执行\n\n```\ncomposer require \"jianyan74/yii2-websocket\"\n```\n\n或者在 `composer.json` 加入\n\n```\n\"jianyan74/yii2-websocket\": \"^1.0\"\n```\n### 配置\n\n 在 `common/config/main.php` 加入以下配置\n  ```\n     'redis' =\u003e [\n         'class' =\u003e 'yii\\redis\\Connection',\n         'hostname' =\u003e 'localhost',\n         'port' =\u003e 6379,\n         'database' =\u003e 0,\n     ],\n  ```\n 在 `console/config/main.php` 加入以下配置。（注意：配置在controllerMap里面）\n \n ```\n// webSocket\n'websocket' =\u003e [\n    'class' =\u003e 'jianyan\\websocket\\console\\WebSocketController',\n    'server' =\u003e 'jianyan\\websocket\\server\\WebSocketServer', // 可替换为自己的业务类继承该类即可\n    'host' =\u003e '0.0.0.0',// 监听地址\n    'port' =\u003e 9501,// 监听端口\n    'type' =\u003e 'ws', // 默认为ws连接，可修改为wss\n    'config' =\u003e [// 标准的swoole配置项都可以再此加入\n        'daemonize' =\u003e false,// 守护进程执行\n        'task_worker_num' =\u003e 4,//task进程的数量\n        // 'ssl_cert_file' =\u003e '',\n        // 'ssl_key_file' =\u003e '',\n        'pid_file' =\u003e __DIR__ . '/../../backend/runtime/logs/server.pid',\n        'log_file' =\u003e __DIR__ . '/../../backend/runtime/logs/swoole.log',\n        'log_level' =\u003e 0,\n    ],\n],\n ```\n \n ### 使用\n \n  ```\n  # 启动 \n  php ./yii websocket/start\n  # 停止 \n  php ./yii websocket/stop\n  # 重启 \n  php ./yii websocket/restart\n   ```\n   \n### 测试\n\n```\n\u003cscript\u003e\n    var wsl = 'ws://[to/your/url]:9501'; // 如果是wss的改成wss://[to/your/url]:9501\n    ws = new WebSocket(wsl);// 新建立一个连接\n    // 如下指定事件处理\n    ws.onopen = function () {\n        var login_data = '{\"type\":\"login\",\"nickname\":\"隔壁老王\",\"head_portrait\":\"123\",\"room_id\":10001}';\n        ws.send(login_data);\n    };\n    // 接收消息\n    ws.onmessage = function (evt) {\n        console.log(evt.data);\n        /*ws.close();*/\n    };\n    // 关闭\n    ws.onclose = function (evt) {\n        console.log('WebSocketClosed!');\n    };\n    // 报错\n    ws.onerror = function (evt) {\n        console.log('WebSocketError!');\n    };\n    \n    // 聊天\n    function say(msg){\n        if(msg){\n            var data = '{\"type\":\"say\",\"to_client_id\":\"all\",\"content\":'+ msg +'}';\n            ws.send(data);\n        }\n    }\n\u003c/script\u003e\n```\n\n### 接口文档\n\n\u003e 发送消息的格式全部以json字符串发过来\n\n### 心跳\n\n请求地址\n\n```\nws://[to/you/url]:9501\n```\n\n参数\n\n参数名 | 说明\n---|---\ntype | pong\n\n无返回\n\n### 进入房间\n\n请求地址\n\n```\nws://[to/you/url]:9501\n```\n\n参数\n\n参数名 | 说明\n---|---\ntype | login\nroom_id | 房间id\nuser_id | 用户id\nnickname | 用户昵称\nhead_portrait | 用户头像\n\n返回(1)\n\n```\n{\n　　\"type\":\"login\",\n　　\"from_client_id\":2,\n　　\"to_client_id\":\"all\",\n　　\"time\":\"2018-04-10 16:41:29\",\n　　\"count\":\"1\",\n　　\"member\":{\n　　　　\"fd\":2,\n　　　　\"room_id\":10001,\n　　　　\"user_id\":1,\n　　　　\"nickname\":\"隔壁老王\",\n　　　　\"head_portrait\":\"123\"\n　　}\n}\n```\n\n返回(2)\n\u003e 当前登录的人还会返回一个在线列表\n\n```\n{\n　　\"type\":\"list\",\n　　\"from_client_id\":2,\n　　\"to_client_id\":2,\n　　\"time\":\"2018-04-10 16:41:29\",\n　　\"list\":[{\n     　　\"fd\":2,\n     　　\"room_id\":10001,\n     　　\"user_id\":1,\n     　　\"nickname\":\"隔壁老王\",\n     　　\"head_portrait\":\"123\"\n     }]\n}\n```\n\n### 发言\n\n请求地址\n\n```\nws://[to/you/url]:9501\n```\n\n参数\n\n参数名 | 说明\n---|---\ntype | say\nto_client_id | 对谁说话:默认 all\ncontent | 内容\n\n返回\n\n```\n{\n　　\"type\":\"say\",\n　　\"from_client_id\":2,\n　　\"to_client_id\":\"all\",\n　　\"time\":\"2018-04-10 16:43:00\",\n　　\"content\":\"123\"\n}\n```\n\n### 送礼物\n\n请求地址\n\n```\nws://[to/you/url]:9501\n```\n\n参数\n\n参数名 | 说明\n---|---\ntype | gift\ngift_id | 礼物id\n\n返回\n\n```\n{\n\t\"type\": \"gift\",\n\t\"from_client_id\": 4,\n\t\"to_client_id\": \"all\",\n\t\"gift_id\": \"礼物id\",\n\t\"time\": \"2018-03-06 11:27:15\"\n}\n```\n\n### 离开房间\n\n请求地址\n\n```\nws://[to/you/url]:9501\n```\n\n参数\n\n参数名 | 说明\n---|---\ntype | leave\n\n返回\n\n```\n{\n\t\"type\": \"leave\",\n\t\"from_client_id\": 1,\n\t\"to_client_id\": \"all\",\n\t\"count\": 2,\n\t\"time\": \"2018-03-06 11:27:15\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjianyan74%2Fyii2-websocket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjianyan74%2Fyii2-websocket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjianyan74%2Fyii2-websocket/lists"}