<?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; //一個(gè)進(jìn)程
$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();
};
// 運(yùn)行所有的worker
Worker::runAll();
開(kāi)啟libevent后
不停的輸出1,無(wú)限循環(huán),注釋掉libevent后一切正常
這個(gè)直接導(dǎo)致Channel無(wú)法使用,不知道是libevent的問(wèn)題還是windows的問(wèn)題
服務(wù)端代碼:
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
require_once __DIR__ . '/Channel/src/Client.php';
define('WORKER_NAME', 'w01'); //主進(jìn)程唯一名稱(chēng),分布式部署確保唯一性
$worker = new Worker('websocket://0.0.0.0:2000'); // 初始化一個(gè)websocket容器,監(jiān)聽(tīng)2000端口
$worker->count = 1; //一個(gè)進(jìn)程
$worker->name = WORKER_NAME;
$worker->onWorkerStart = function($worker) {
};
$worker->onConnect = function($connection)use($worker) {
};
// 當(dāng)有客戶(hù)端發(fā)來(lái)消息時(shí)執(zhí)行的回調(diào)函數(shù)
$worker->onMessage = function($connection, $data)use($worker) {
};
// 當(dāng)有客戶(hù)端連接斷開(kāi)時(shí)
$worker->onClose = function($connection)use($worker) {
};
// 運(yùn)行所有的worker
Worker::runAll();
我的系統(tǒng)是windows7,php版本是php-5.5.38,換成php7.0下載對(duì)應(yīng)的event也是這個(gè)問(wèn)題,開(kāi)啟就會(huì)不停的觸發(fā)onConnect,關(guān)閉就恢復(fù)正常
我估計(jì)是 WorkerMan 只要檢測(cè)到存在 Libevent 擴(kuò)展就會(huì)啟用 Workerman\Events\Libevent(否則使用的是 Workerman\Events\Select),可能是這個(gè) Workerman\Events\Libevent 在 Windows 下有什么問(wèn)題吧,導(dǎo)致通信過(guò)程失敗、連接斷掉、重新連接……
話(huà)說(shuō),Windows 環(huán)境下也就是做個(gè)調(diào)試開(kāi)發(fā),就別搞那么復(fù)雜了,能跑起來(lái)就行了。