一個(gè)Server連接了gatewayworker中的gate, 發(fā)了個(gè)消息,如何才能讓所有businessworker都收到這個(gè)消息并處理呢?
?
根據(jù)框架,應(yīng)該只有最初選定的worker才會(huì)收到這個(gè)消息并處理,可是我現(xiàn)在的需求是想讓所有worker都能處理,因?yàn)椴⒉磺宄畛蹩蛻舳诉B接被哪個(gè)worker處理了(我想讓那個(gè)worker關(guān)閉這個(gè)客戶端連接)!
任何一個(gè)businessworker調(diào)用Gateway::closeClient($client_id) 都可以關(guān)閉對(duì)應(yīng)的連接,不用考慮之前是在哪個(gè)businessworker進(jìn)程處理的。一般來說之前連接在哪個(gè)businessworker進(jìn)程處理的,后續(xù)連接的消息啥的都是在那個(gè)businessworker進(jìn)程處理,除非你自己設(shè)定了gateway的消息路由。
兩個(gè)問題:
1、gateway收到客戶端消息以后,策略是隨機(jī)選擇一個(gè)可用的worker來轉(zhuǎn)發(fā)處理的,關(guān)閉客戶端時(shí),當(dāng)時(shí)連的是哪個(gè)worker,那就由哪個(gè)worker負(fù)責(zé)關(guān)閉,換句話,是可以區(qū)分出來的,需要自己想辦法區(qū)分,比如每個(gè)worker都有自己獨(dú)立的進(jìn)程ID。
2、框架策略是路由隨機(jī)選擇一個(gè)可用的worker, 所以直接是沒有辦法讓所有的worker都能收到消息的。