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