我的程序設(shè)計如下圖:
客戶端通信數(shù)據(jù)格式為:
$msg = [
'from' => 'selfUsername' ,
'to' => 'toUsername' ,
'msg' => 'hello boy'
];
$msg = serialize($msg);
第一種實現(xiàn)與遇到的問題:
轉(zhuǎn)發(fā)服務(wù)器創(chuàng)建的監(jiān)聽客戶端連接的子進程接受到客戶端發(fā)送的消息后,解析數(shù)據(jù),找到監(jiān)聽對應(yīng)客戶端連接的子進程,將消息發(fā)送給子進程,然后那個子進程再將消息發(fā)送給對應(yīng)的客戶端鏈接。
這邊有一個難題,就是如何給創(chuàng)建的子進程設(shè)立標識(使用進程ID來唯一標識一個子進程可以不)??進程間通信的方式該使用哪一種(消息隊列、共享內(nèi)存、socket...)??
第二種實現(xiàn)與遇到的問題
客戶端連接的時候,將 資源描述符 和 創(chuàng)建的監(jiān)聽客戶端連接的子進程ID 保存下來。客戶端連接發(fā)來消息,對應(yīng)監(jiān)聽的子進程接受到消息后,通過 進程ID 找到 對應(yīng)的客戶端連接資源描述符,直接向該客戶端連接發(fā)送消息。
這邊碰到的問題是,客戶端鏈接的資源描述符 是 resource 類型的,無法在共享內(nèi)存中維護一個保存有所有子進程ID 和 每個子進程ID對應(yīng)監(jiān)聽的客戶端連接資源描述符 的數(shù)組。因為 shm_put_var 中第二個參數(shù)寫著保存的只能是能夠被 serialize 的變量類型(resource 類型的無法序列化)!
請問,按照我上面提供的程序設(shè)計圖,如何實現(xiàn)一對一聊天??
該問題有另外一種方法實現(xiàn),參考我的另一種實現(xiàn) 私聊(PHP實現(xiàn))。
不知道就這邊的思路該如何實現(xiàn)??
- 3 回答
- 0 關(guān)注
- 525 瀏覽
添加回答
舉報
0/150
提交
取消