多臺(tái)硬件設(shè)備要與服務(wù)器進(jìn)行tcp連接,請(qǐng)問(wèn)是用什么方法
1)服務(wù)器打開(kāi)多個(gè)端口監(jiān)聽(tīng),一個(gè)硬件連接一個(gè)服務(wù)器端口,但是如何同時(shí)監(jiān)聽(tīng)多個(gè)端口,并獨(dú)立發(fā)送數(shù)據(jù)?
2)服務(wù)器只開(kāi)一個(gè)端口,所有硬件都連接同一個(gè)端口,請(qǐng)問(wèn)如何區(qū)別這些設(shè)備?
還有其他的方法,敬請(qǐng)賜教。
以我的理解,服務(wù)端只開(kāi)一個(gè)端口就好了。
我是用的GatewayWorker
客戶端連接上后發(fā)送一個(gè)登錄信息,表明客戶端是哪個(gè)id(硬件都有一個(gè)設(shè)備id的吧),Events::onMessage里面驗(yàn)證設(shè)備是否合法,如果合法就設(shè)置個(gè)$_SESSION = 'xxxx'?。這樣這個(gè)設(shè)備以后發(fā)消息通過(guò)$_SESSION 就能知道是哪個(gè)設(shè)備發(fā)的信息了。如果沒(méi)有$_SESSION 則說(shuō)明沒(méi)登錄過(guò)。
onMessage里驗(yàn)證完后最好用bindUid($client_id,設(shè)備id )綁定下,這樣就可以在任何時(shí)候通過(guò)設(shè)備id給設(shè)備發(fā)信息了Gateway::sendToUid(設(shè)備id,$msg);
抱歉,說(shuō)的有點(diǎn)亂...