开启多个 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

最新文章

  1. Ibatis动态拼装sql,常用标签总结及举栗子。
  2. php数据访问(批量删除)
  3. [转]ConsumeContainerWhitespace property to remove blank space in SSRS 2008 report
  4. git - 必备指令
  5. bzoj3890 [Usaco2015 Jan]Meeting Time
  6. 读取XML文件的几种方式的效率分析
  7. ASP.NET中时间的绑定和格式化
  8. C#多线程之Parallel中 类似于for的continue,break的方法
  9. 三星S5驱动安装
  10. 3223: Tyvj 1729 文艺平衡树
  11. JS语句
  12. java反射 概念
  13. VS2010 express中改变VC Default include/lib/… 目录
  14. ELK 架构之 Elasticsearch、Kibana、Logstash 和 Filebeat 安装配置汇总(6.2.4 版本)
  15. GP中Geoprocessor.Execute(string name, IVariantArray parameters, ITrackCancel trackCancel)
  16. 剑指offer——python【第40题】数组中只出现一次的数字
  17. 1.ECS(CentOS7)主机名修改命令
  18. Linux块设备驱动详解
  19. datagrid在MVC中的运用01-基本属性并实现分页
  20. Java 编程中关于异常处理的 10 个最佳实践

热门文章

  1. vue验证码倒计时60s
  2. 波利亚(George P&#243;lya)的一些链接
  3. 用shape-outside实现文字环绕、CSS圆锥色彩渐变、指定背景在容器上如何附着、长度单位vh
  4. 升级adb
  5. 前端vue框架上手记录
  6. win10查看笔记本电池性能
  7. java Comparator和Comparable的区别?
  8. Debug --&gt; 箱线图
  9. 【alive-progress】Python控制台输出动态进度条
  10. 实验1 Python开发环境使用和编程初体验