服務器幾乎分別同時向同一個客戶端發(fā)送兩條數據,有時候客戶端得到的數據包是正常的(上面這個就是正常的)。有時候會把兩條合并成一條數據發(fā)過來。導致json格式解析錯誤。我用的text協議。這個粘包問題我搜過其它帖子說的text協議自己已經處理了粘包,但是我發(fā)現我這邊還是有這個問題,是哪里沒有設置對嗎?下面這個就是有時候會粘包的情況,兩條合成一條了。
應該是業(yè)務邏輯的問題。
比如服務端send的數據就是把2個數據合并在一起發(fā)送了。
// 向所有人發(fā)送
$data['client_list']=$client_list;
Gateway::sendToAll(json_encode($data)."\n");
// 向當前client_id發(fā)送數據
Gateway::sendToClient($client_id, "當前用戶:$client_id said $message"."\n");
就是先后發(fā)送兩條數據。本身是不允許這樣做嗎?只能發(fā)送一條數據是不?
這樣可以,前提是gatway使用了協議,如果是text協議,gatewayWorker里發(fā)送數據不需要手動加"\n"。另外js無法直接使用text協議。所以我不清楚你到底什么情況。
我用的node,可以使用text協議。我在當客戶端發(fā)來消息時觸發(fā)onMessage里面,向客戶端發(fā)送消息Gateway::sendToAll()和Gateway::sendToClient()。客戶端收到消息就會出現有時候粘包的現象,有時候又是正常的
因為node沒有根據協議來分包導致的。node收到消息后根據換行符"\n"來分下包就好了。也就是說,你的node應該就是一個裸tcp,沒有使用任何協議,沒有做分包。