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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • PHP网页缓存技术优点及代码实例

    下面就是“PHP网页缓存技术优点及代码实例”的完整攻略。 1. 什么是网页缓存技术? 网页缓存技术可以把一些查询可以一直重用的结果缓存起来,并在下一次查询时返回缓存的结果,从而减轻服务器的负担,提高用户体验。 2. 网页缓存技术的优点 网页缓存技术有很多优点: 2.1 提高网站访问速度 网页缓存技术可以将一些重复的数据保存在内存中,从而加快网站的访问速度。 …

    PHP 2023年5月27日
    00
  • PHP 实现explort() 功能的详解

    这里是关于 “PHP 实现 explode() 功能的详细攻略” 的完整说明: 1. 什么是 explode() 函数? explode() 函数是 PHP 中的一个用于字符串操作的函数,它能够将一个字符串按照指定的分隔符将其分割成多个子串,最终返回一个字符串数组。这个函数的语法如下: array explode ( string $delimiter , …

    PHP 2023年5月27日
    00
  • 强制PHP命令行脚本单进程运行的方法

    强制PHP命令行脚本单进程运行,可以利用Linux系统的锁机制来实现。通过在脚本运行时,使用flock()函数加锁,来保证只有一个进程在执行该脚本。 下面是实现该方法的具体步骤: 在脚本中添加flock函数加锁,以保证只有一个进程在运行该脚本。例如: <?php $fp = fopen("/var/run/my_script.lock&quo…

    PHP 2023年5月23日
    00
  • php计算多个集合的笛卡尔积实例详解

    PHP计算多个集合的笛卡尔积实例详解 什么是笛卡尔积 笛卡尔积,又称直积,是在数学中用于组合两个集合的方法。笛卡尔积的结果是一个新的集合,该集合中的每个元素都是由两个原始集合中的一个元素组成的有序对。 举一个简单的例子:假设有两个集合,分别为A={a,b,c}和B={x,y},则A和B的笛卡尔积为: A × B = {(a,x),(a,y),(b,x),(b…

    PHP 2023年5月26日
    00
  • JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】 原创

    JavaScript语法高亮插件highlight.js用法详解 什么是highlight.js highlight.js是一个轻量级的纯JavaScript语法高亮插件,它支持超过170种不同的编程语言,并提供了多种样式主题可供选择。 如何使用highlight.js 首先,从highlight.js官网下载highlight.js文件。 在你的网页中引入…

    PHP 2023年5月26日
    00
  • php设置页面超时时间解决方法

    下面是关于“PHP设置页面超时时间解决方法”的详细讲解: 1. 超时时间的概念 在前往解决方法之前,首先需要了解什么是“页面超时时间”。在web开发过程中,当我们发起一个请求时,php会在一定时间内(默认为 30 秒)等待服务器响应并返回结果,如果在这个时间内没有得到响应,就会返回“请求超时”的错误信息,这个等待时间就叫做“页面超时时间”。 2. 解决方法 …

    PHP 2023年5月23日
    00
  • php parse_str() 函数的定义和用法

    PHP parse_str() 函数的定义和用法: parse_str() 函数将 PHP 字符串解析成变量。 语法 parse_str(string $str, array $output ) 参数 参数 描述 $str 必需。规定要解析的字符串。 $output 可选。由解析得到数据所生成的变量名和它们的值组成的数组。 如果指定了 $output 参数,…

    PHP 2023年5月26日
    00
  • PHP 实现 WebSocket 协议原理与应用详解

    PHP 实现 WebSocket 协议原理与应用详解 什么是 WebSocket 协议 WebSocket 协议是一种基于 TCP 协议的网络协议,它属于轻量级协议,适用于服务器与客户端之间长时间连接通信。相对于 HTTP 协议每次请求都进行连接和断开,WebSocket 协议可以实现一个长连接,从而避免了多次连接的开销,并且可以在服务器端推送数据给客户端,…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部