windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务
🎈 开启多个 ws 服务失败#
- 正常情况下,如果你想开启多个
websocket
服务的话 - 只要在一个文件中,输入
new Worker
两次,监听不同端口,使用Worker::runAll()
命令即可 - 但是你会发现在在
windows
中无法在一个文件中同时监听两个websocket
服务,其他系统比如Linux
是没有问题的 - 会报
multi workers init in one php file are not support
错误,意思windows
中禁止在同一个文件中开启多个websocket
服务
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:1234");
$http_worker->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 文件名
命令启动这两个文件即可
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 需要监听不同的端口
$ws_worker = new Worker('websocket://0.0.0.0:xxxx');
$ws_worker->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
作者:江户川码农
出处:https://www.cnblogs.com/tinygeeker/p/17226133.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
声明:江户川码农的文章禁止转载哦!
分类:
《一文让你搞懂系列》
Buy me a coffee ☕ ?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端