在查看服務(wù)端主動推送給客戶端消息的例子時發(fā)現(xiàn),大多數(shù)代碼都是寫在回調(diào)函數(shù)(最普遍的是onMessage函數(shù))里的。 本人現(xiàn)在要實(shí)現(xiàn)的場景是服務(wù)端不定期主動向客戶端推送消息,代碼上我想在類文件里寫一個方法外部調(diào)用,這樣的話就會有個問題, 找不到$connection , 繼而$connection->send() 無法使用。
這個問題該如何處理呢? 謝謝
每個 Worker 是一個監(jiān)聽容器,所有正在通信的連接都保存在 $worker->connections 里面。
但是你想要主動給客戶端推送信息的時候,首先自己得知道推送給哪個客戶端(除非你是要廣播,那樣的話直接遍歷 $worker->connections 就可以了),所以你得自己想辦法來維護(hù)一個類似 client_id 的東西,用于找到特定的客戶端。
如果你使用 GatewayWorker 或者 PHPSocketIO 的話,這樣的機(jī)制已經(jīng)存在了。
再有,【在類文件里寫一個方法外部調(diào)用】這個說法是有問題的。
Workerman 是一個 CLI 方式運(yùn)行的進(jìn)程,所以跟傳統(tǒng)意義上 Web 應(yīng)用里的 PHP 程序文件不一樣?!绢愇募坎皇且粋€等待被調(diào)用的東西,它自己就是一個進(jìn)程,沒有【外部調(diào)用】。想要主動向客戶端推送消息,有兩個可能的途徑:一個是用定時器觸發(fā),一個是類似 web-msg-sender 那樣以網(wǎng)絡(luò)通信的方式接收來自外部的指令并進(jìn)行相應(yīng)的操作。