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日

相关文章

  • php5.2的curl-bug 服务器被php进程卡死问题排查

    下面我将详细讲解“php5.2的curl-bug 服务器被php进程卡死问题排查”的完整攻略。 问题背景 当使用php5.2版本中的curl库进行网络请求时,有可能会出现curl-bug,导致php进程卡死,进而导致服务器崩溃。这是由于curl库在处理某些特殊情况时出现了死锁现象,从而导致进程卡死。 排查过程 要想排查此问题,首先需要了解问题出现的原因。通常…

    PHP 2023年5月27日
    00
  • php 无限级分类,超级简单的无限级分类,支持输出树状图

    下面我来给你详细讲解“PHP无限级分类”攻略。 简介 无限级分类是一个常用的分类方式,在开发中用来表示多级分类,例如商品分类、新闻分类等。 原理 无限极分类是通过递归的方式来实现的。递归函数基本原理就是函数在调用自身,直到满足条件返回结果。 因此在分类时,我们需要先对数据进行递归处理,生成对应的层级关系。最后输出树状图。 实现步骤 以下是php实现无限级分类…

    PHP 2023年5月26日
    00
  • php中字符串和正则表达式详解

    PHP中字符串和正则表达式详解 字符串和正则表达式在PHP中是非常重要的概念,它们被广泛用于处理和操作文本数据。本文将对PHP中字符串和正则表达式进行详细讲解。 一、PHP中的字符串 在PHP中,字符串可以用单引号或双引号来表示。单引号字符串中的变量和转义字符都不会被解析,而双引号字符串中则会进行解析。例如: $name = "John"…

    PHP 2023年5月26日
    00
  • PHP得到某段时间区间的时间戳 php定时任务

    要得到某个时间区间的时间戳,需要使用PHP中的时间函数来帮助,其中最主要的函数有以下三个: strtotime():将任何英文文本的日期时间描述解析为Unix时间戳 date():将Unix时间戳格式化为日期时间的字符串 time():获取当前的Unix时间戳 可以通过使用这些函数来获取某个时间区间的时间戳。 以下是一个示例: $start_date = ‘…

    PHP 2023年5月27日
    00
  • ie与session丢失(新窗口cookie丢失)实测及解决方案

    IE与Session丢失(新窗口cookie丢失)实测及解决方案 背景 在使用IE浏览器时,会经常遇到在新窗口打开网页时,原本存在的session信息和cookie信息丢失的情况,这不仅会给用户带来不便,也会影响网站的正常运转。 实测过程 为了验证这个问题,我们采用了以下步骤进行实测: 在IE浏览器中打开网站,并登录成功。此时,我们可以看到浏览器中已经设置了…

    PHP 2023年5月27日
    00
  • PHP strtotime函数详解

    PHP strtotime函数详解 什么是 strtotime 函数? PHP 中的 strtotime 函数可以将一个日期时间字符串转换为 Unix 时间戳。 函数语法 strtotime ( string $time [, int $now = time() ] ) : int $time:必需,待转换为 Unix 时间戳的时间字符串。 $now:可选,…

    PHP 2023年5月26日
    00
  • #PHP #MySQL数据操作 #在线聊天 PHP实现在线聊天与MySQL的“增查删改”

      目录 1.目标图 2.项目简介  3.目录结构  4.建立MySQL表  5.实现过程  5.1 index.php 5.2 data.php  5.2 method.php 5.3  case.php 5.4 main.js 5.5 css/style.css 5.6 img\icon01.png   5.7 js\jquery.min.js 6.总结…

    PHP 2023年4月18日
    00
  • iis6手工创建网站后无法运行php脚本的解决方法

    下面是详细讲解“iis6手工创建网站后无法运行php脚本的解决方法”的完整攻略。 标题 问题描述 在 IIS6 上手工创建网站,在网站目录下放置了 PHP 脚本文件,但是无法正常访问 PHP 脚本。 解决方法 1. 安装 PHP 扩展 首先需要确认是否已经在服务器上安装了 PHP,如果没有需要安装 PHP 扩展,以下是安装步骤: 下载 PHP 扩展安装包,可…

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