windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

✨ 目录

开启多个 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
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: windows

“windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务” 的相关文章