1.第一個問題感覺描述挺模糊的,什么場景啊?你說的誰的send ? ajax請求失???具體報告了什么錯誤碼和錯誤信息? ajax請求失敗和send又有什么關(guān)系呢? ......。 總體原則上看,只能說GatewayWorker是基于網(wǎng)絡(luò)事件庫的異步非塞IO模型,所以非常穩(wěn)定。
2.如果想采用 send 到 Events.php 類, 分兩步,參考做法大致如下:
(1) 參考 start_gateway.php 新啟一個 start_gateway2.php,即新開一個內(nèi)部推送端口,參考代碼:
// gateway 進(jìn)程,這里使用Text協(xié)議
$gateway = new Gateway("text://192.168.1.100:9999");
// gateway名稱,status方便查看
$gateway->name = 'textGateway';
// gateway進(jìn)程數(shù)
$gateway->count = 1;
// 本機(jī)ip,分布式部署時使用內(nèi)網(wǎng)ip
$gateway->lanIp = '127.0.0.1';
// 內(nèi)部推送端口,
$gateway->startPort = 3900;
// 服務(wù)注冊地址
$gateway->registerAddress = '127.0.0.1:1238';
// 如果不是在根目錄啟動,則運行runAll方法
!defined('GLOBAL_START') && Worker::runAll();
(2)利用?AsyncTcpConnection 建立異步連接,直接send 即可,Event.php中的onMessage方法會接收到send來的數(shù)據(jù),參考代碼:
$worker = new Worker();
$worker->onWorkerStart = function ($worker){
$connection = new AsyncTcpConnection('text://192.168.1.100:9999');
$connection->onClose = function($connection) {
echo "will reconnect after 2 seconds" . PHP_EOL;
$connection->reconnect(2);
};
//推送自己的業(yè)務(wù)數(shù)據(jù)
$connection->send("some data....");
$connection->connect();
};
// 運行所有服務(wù)
!defined('GLOBAL_START') && Worker::runAll();
send 和ajax 的問題:運行GatewayWorker服務(wù),立即開啟html頁面,當(dāng) tcp 握手完成時發(fā)起ajax,采用ajax請求會失敗,服務(wù)器 500 錯誤,當(dāng)服務(wù)器運行一段時間后再開頁面就是沒有問題的;同樣的情況在頁面使用 send 發(fā)送數(shù)據(jù)到 Event.php 的話可以正常運行不用等待
主要問題:由于框架啟動引入文件和 GatewayWorker 服務(wù)啟動引入文件不同,是不是會造成初始化的類不同,導(dǎo)致GatewayWorker不能使用框架類,怎么在GatewayWorker服務(wù)啟動同時引入框架類
send 和ajax 的問題:運行GatewayWorker服務(wù),立即開啟html頁面,當(dāng) tcp 握手完成時發(fā)起ajax,采用ajax請求會失敗,服務(wù)器 500 錯誤,當(dāng)服務(wù)器運行一段時間后再開頁面就是沒有問題的;同樣的情況在頁面使用 send 發(fā)送數(shù)據(jù)到?Event.php 的話可以正常運行不用等待
主要問題:由于框架啟動引入文件和?GatewayWorker 服務(wù)啟動引入文件不同,是不是會造成初始化的類不同,導(dǎo)致GatewayWorker不能使用框架類,怎么在GatewayWorker服務(wù)啟動同時引入框架類
1、ajax 返回500服務(wù)器錯誤,只要gatewaywoker服務(wù)啟動OK,那這個和gatewaywoker服務(wù)沒有什么直接關(guān)系,自己排查下吧,catch下錯誤回調(diào),一般多是通信數(shù)據(jù)格式有問題所致。
2、不同的框架整合關(guān)乎細(xì)節(jié)并依賴應(yīng)用場景,需要自己酌情處理【你可以學(xué)學(xué)thinkphp怎么整合的】,否則建議將第三方框架和gatewayworker框架分開獨立部署,然后就可以在框架之間靈活業(yè)務(wù)處理,具體方案官方都有樣板: http://workerman.net/gatewaydoc/advanced/push.html