程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php的swoole擴展中onclose和onconnect接口不被調用的問題,swooleonclose

php的swoole擴展中onclose和onconnect接口不被調用的問題,swooleonclose

編輯:關於PHP編程

php的swoole擴展中onclose和onconnect接口不被調用的問題,swooleonclose


  在用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_server中是不調用connect和receive接口的,相對應調用request接口。

  在聊天的小例子中用的是swoole_websocket_server,通過測試在swoole_websocket_server中receive接口也是沒有被調用的,但是作為長連接服務,worker中

close和connect中的回調還是有必要的。比如上線廣播通知,下線廣播通知,都是需要回調這兩個對應的接口才能很好的實現。所以官方肯定是支持回調的。

  最後找到問題是通過一份swoole版本更新公告。

  swoole-1.7.16 版本已發布,BUG 修復版本:

增加swoole_server->tick和swoole_timer_tick函數
增加http服務器對gzip壓縮的支持
增加swoole_table->incr/decr原子自增/自減方法
增加open_eof_split配置,使用EOF檢測可以支持自動分包
增加server統計項request_count和worker_request_count
增加server的連接迭代器,可以使用foreach遍歷服務器的所有連接
增加http服務器請求的query_string
增加http服務器multipart-form和上傳文件的支持
修復onReceive數據合並失效的BUG
修復swoole_server->addtimer與tick定時器沖突的BUG
修復低版本Linux下Accept未設置阻塞的問題
修復Accept失敗返回Too Many Connection重復打印日志的問題
修復task_max_request參數失效的問題
修復swoole_client的waitall參數失效問題
修復swoole_table發生死循環的BUG
WebSocket服務器onOpen回調函數第2個參數由$fd調整為$request對象
Http服務器允許發送空body的response
禁用swoole_websocket_server->send方法
BASE模式支持向任意FD發送數據
設置dispatch_mode = 1, 3 後關閉onClose/onConnect事件回調
允許Worker進程內設置非系統保留信號
移除swoole底層對對象資源屬性的依賴,直接讀取指針,提升性能
解決心跳線程無法強制殺掉遺留連接的問題
優化dispatch_mode=3模式,提升任務分配的效率

     是worker分配模式的問題。在搶占模式和輪詢模式,這兩個回調接口不在被調用。固定模式,每個客戶端的數據包都會由固定的worker進程處理,這樣就可以在worker進程中存放一些屬於這個客戶端的私有信息,緩存一部分讀寫頻繁的數據,就和erlang中的進程詞典類似的操作。這樣客戶端在下線時,要做一些清理操作。上線初始化操作。所以這個模式是很有意義,也是很有必要的。固定模式適合處理每個客戶端邏輯相對均勻的情況。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved