您当前的位置:首页 >> 大数据 >  正文
windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务
来源: 腾讯云      时间:2023-03-17 14:23:23


(相关资料图)

开启多个 ws 服务失败

正常情况下,如果你想开启多个 websocket服务的话只要在一个文件中,输入 new Worker两次,监听不同端口,使用 Worker::runAll()命令即可但是你会发现在在 windows中无法在一个文件中同时监听两个 websocket服务,其他系统比如 Linux是没有问题的会报 multi workers init in one php file are not support错误,意思 windows中禁止在同一个文件中开启多个 websocket服务
onMessage = function(TcpConnection $connection, $data){    $connection->send("hello http");};$ws_worker = new Worker("websocket://0.0.0.0:2345");$ws_worker->onMessage = function(TcpConnection $connection, $data){    $connection->send("hello websocket");};// 运行所有Worker实例Worker::runAll();

开启服务失败解决办法

windows版本的 workerman不支持在同一个文件中实例化多个 Worker
因此 `windows` 版本的 `workerman` 需要将多个 `Worker` 实例初始化放在不同的文件中才可以解决
比如我们定义两个文件,一个 start_http.php,另一个是 start_websocket.php,在文件中分别加入以下代码,监听不同端口,然后使用 php 文件名命令启动这两个文件即可
onMessage = function(TcpConnection $connection, $data){    $connection->send("hello websocket");};// 运行所有Worker实例(这里只有一个实例)Worker::runAll();

同一个窗口中运行

上面虽然可以解决运行多个 websocket实例,但是你会发现有几个文件,就会有几个运行窗口如果开启的服务更多,窗口也会更多,那么如何在同一个窗口中运行启动多个服务呢那么如果要解决这个问题,我们就可以创建一个 init.bat文件,然后在文件中加入以下代码,然后双击运行即可实现在同一个窗口中启动多个服务/d:表示切换目录/b:表示不打开新窗口,在当前窗口继续执行
%切换到项目根目录%cd /d E:\xxxxxx%启动第一个服务%start /b php start_http.php%启动第二个服务%start /b php start_websocket.php

X 关闭

X 关闭