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

yizhihongxing

? 开启多个 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输出数组中重名的元素的几种处理方法 当一个数组中包含有重复的元素时,我们需要对重复元素进行处理并输出。下列是几种处理重复元素的方法: 方法一:循环遍历数组去除重复元素 在这个方法中,我们在遍历整个数组结束后得到新的数组,新的数组中不包含任何重复元素。 $arr = array(1, 2, 3, 1, 2, 4); $newArr = array(); …

    PHP 2023年5月26日
    00
  • Perl信号处理学习简单小结

    下面我会详细讲解一下如何学习Perl信号处理,首先我们需要了解信号处理是什么。 什么是信号处理? 信号是UNIX操作系统及其衍生版本的一种功能,它用于通知进程发生了某种特定的事件,例如内存错误或用户输入了CTRL+C。进程可以通过注册信号处理程序来定义它们在各种不同事件发生时采取的操作,例如终止进程、忽略信号,或者执行某些自定义响应。 Perl的信号处理允许…

    PHP 2023年5月27日
    00
  • php计算十二星座的函数代码

    针对“php计算十二星座的函数代码”的问题,我可以提供以下完整攻略: 1. 星座计算原理 首先,我们需要了解一下星座计算的原理。一般来说,我们通过给定的出生日期,可以得到一个人的星座信息。具体计算方法如下: 首先,将出生日期按照年、月、日分别进行处理,得到对应的数值。 然后,根据星座的划分规则,计算出对应的起始日期和结束日期。 最后,将出生日期与起始日期和结…

    PHP 2023年5月26日
    00
  • PHP按指定键值对二维数组进行排序的方法

    接下来将为您详细讲解“PHP按指定键值对二维数组进行排序的方法”。 在进行排序之前,我们需要先了解PHP中的几个关键函数,分别为:usort()、uasort()、uksort()。其中usort()函数用于按照自定义规则对数组进行排序,uasort()函数用于对数组进行排序并保留索引key值,uksort()函数用于按照自定义规则对数组的key进行排序。 …

    PHP 2023年5月26日
    00
  • PHP QRCODE生成彩色二维码的方法

    下面是关于“PHP生成彩色二维码的方法”的完整攻略。 1. 简介 QR码(Quick Response Code)是一种二维码,它包含黑白相间的正方形,可存储文字、链接、图片等信息。PHP中有很多生成QR码的库可以使用,但是通常生成的QR码只有单色的黑白二维码,本文将介绍如何使用PHP生成彩色QR码。 2. 基本原理 QR码本质上是由一些黑白相间的方格构成的…

    PHP 2023年5月26日
    00
  • php function用法如何递归及return和echo区别

    请先了解一下递归的概念:递归是指在一个函数中调用自身的函数。使用递归可以将问题分解为更小的问题,使得问题的解决变得更加简单。下面我们将结合 PHP function 讲解如何使用递归及 return 和 echo 的区别。 一、什么是 PHP Function 递归? 函数递归是指函数通过调用自身来解决问题的一种技术。 PHP Function 递归通常用于…

    PHP 2023年5月28日
    00
  • PHP读取配置文件类实例(可读取ini,yaml,xml等)

    首先我们需要了解一下这个问题涉及到的一些概念。 概念介绍 PHP读取配置文件类 在 PHP 中,我们可以通过自定义一个 PHP 读取配置文件类来方便地读取配置文件中的配置信息。这些类通常会支持读取格式丰富多样的配置文件,如 ini、yaml、xml 等。 INI 文件格式 INI 是一种简单的配置文件格式,其基本格式如下: ; 注释 key1=value1 …

    PHP 2023年5月26日
    00
  • PHP对象转换为数组函数(递归方法)

    下面我会给出详细讲解“PHP对象转换为数组函数(递归方法)”的完整攻略,包含如下内容: 题目背景 函数原型与参数说明 函数实现思路 示例解释 注意事项 题目背景 在 PHP 开发中,有时候需要将一个对象转换成数组,以便于对其进行处理。因此,我们需要编写一个函数来实现将 PHP 对象转换成 PHP 数组的功能。 函数原型与参数说明 函数名:object_to_…

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