<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/Workerman/Autoloader.php';
require_once __DIR__ . '/Channel/src/Client.php';
$worker = new Worker();
$worker->count = 1; //一个进程
$worker->name = "test";
$worker->onWorkerStart = function($worker) {
$worker->conn = new AsyncTcpConnection('ws://127.0.0.1:2000');
$worker->conn->onConnect=function(){
echo 1;
};
$worker->conn->connect();
};
// 运行所有的worker
Worker::runAll();
开启libevent后
不停的输出1,无限循环,注释掉libevent后一切正常
这个直接导致Channel无法使用,不知道是libevent的问题还是windows的问题
服务端代码:
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
require_once __DIR__ . '/Channel/src/Client.php';
define('WORKER_NAME', 'w01'); //主进程唯一名称,分布式部署确保唯一性
$worker = new Worker('websocket://0.0.0.0:2000'); // 初始化一个websocket容器,监听2000端口
$worker->count = 1; //一个进程
$worker->name = WORKER_NAME;
$worker->onWorkerStart = function($worker) {
};
$worker->onConnect = function($connection)use($worker) {
};
// 当有客户端发来消息时执行的回调函数
$worker->onMessage = function($connection, $data)use($worker) {
};
// 当有客户端连接断开时
$worker->onClose = function($connection)use($worker) {
};
// 运行所有的worker
Worker::runAll();
我的系统是windows7,php版本是php-5.5.38,换成php7.0下载对应的event也是这个问题,开启就会不停的触发onConnect,关闭就恢复正常
我估计是 WorkerMan 只要检测到存在 Libevent 扩展就会启用 Workerman\Events\Libevent(否则使用的是 Workerman\Events\Select),可能是这个 Workerman\Events\Libevent 在 Windows 下有什么问题吧,导致通信过程失败、连接断掉、重新连接……
话说,Windows 环境下也就是做个调试开发,就别搞那么复杂了,能跑起来就行了。
谢谢,可能windows确实有问题