在用swoole擴充寫線上聊天範例的時候遇到一個問題,查了不少資料,現在記錄於此。
透過看swoole_server的介面文檔,回呼註冊介面on中倒是有明確的註解:
* swoole_server->on & swoole_http_server->on are the same except swoole_http_server : * - not accepting onConnect/onReceive callback accept events onRequest
swoole_http_server和swoole_server大體是相同的,但是swoole_http_http_Live的介面和介面調用。
在聊天的小例子中用的是swoole_websocket_server,透過測試在swoole_websocket_server中receive介面也是沒有被呼叫的,但是作為長連線服務,worker中
close和connect中的回呼還是有必要的。例如上線廣播通知,下線廣播通知,都是需要回呼這兩個對應的介面才能很好的實作。所以官方肯定是支持回調的。
最後找到問題是透過一份swoole版本更新公告。
swoole-1.7.16 版本已發布,BUG 修復版本:
增加swoole_server->tick和swoole_timer_tick函數
增加http伺服器對gzip壓縮的支援
增加sole/crc增加open_eof_split配置,使用EOF偵測可以支援自動分包
增加server統計項目request_count和worker_request_count
增加server的連線迭代器,可以使用foreachhttphttphttpcultipart-formin和上傳檔案的支援
修復onReceive資料合併失效的BUG
修復swoole_server->addtimer與tick定時器衝突的BUG
修復低版本Linux下Accept未設定阻塞的問題
修復Accept失敗返回Too Many ConnectionConnection問題
修正task_max_request參數失效的問題
修正swoole_client的waitall參數失效問題
修復swoole_table發生死循環的BUG
WebSocket伺服器onOpen回呼函數第2個參數由$fddrequestrequestequest 允許發送物件為$requestp response
停用swoole_websocket_server->send方法
BASE模式支援傳送資料至任意FD
設定dispatch_mode = 1, 3 後關閉onClose/onConnect事件回呼,woole
允許物件在底層設定非核內資源屬性的依賴,直接讀取指針,提升效能
解決心跳執行緒無法強制殺死遺留連線的問題
最佳化dispatch_mode=3模式,提升任務分配的效率 是worker分配模式的問題。在搶佔模式和輪詢模式,這兩個回呼介面不在被呼叫。固定模式,每個客戶端的資料包都會由固定的worker進程處理,這樣就可以在worker進程中存放一些屬於這個客戶端的私有信息,緩存一部分讀寫頻繁的數據,就和erlang中的進程詞典類似的操作。這樣客戶端在下線時,要做一些清理操作。上線初始化操作。所以這個模式是很有意義,也是很必要的。固定模式適合處理每個客戶端邏輯相對均勻的情況。
以上就介紹了php的swoole擴充中onclose和onconnect介面不被呼叫的問題,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。