乐趣区

关于websocket: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
退出移动版