国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

怎么知道客戶端收到服務(wù)器發(fā)的消息

bijingjieshen

客戶端向服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器返回相應(yīng)數(shù)據(jù),怎么知道客戶端收到數(shù)據(jù)了呢

5557 2 0
2個(gè)回答

walkor 打賞

send返回true,僅僅代表數(shù)據(jù)已經(jīng)成功寫入到該連接的操作系統(tǒng)socket發(fā)送緩沖區(qū),并不意味著數(shù)據(jù)已經(jīng)成功的發(fā)送給對(duì)端socket接收緩沖區(qū),更不意味著對(duì)端應(yīng)用程序已經(jīng)從本地socket接收緩沖區(qū)讀取了數(shù)據(jù)。不過即便如此,只要send不返回false并且網(wǎng)絡(luò)沒有斷開,而且客戶端接收正常,數(shù)據(jù)基本上可以看做100%能發(fā)到對(duì)方的。

由于socket發(fā)送緩沖區(qū)的數(shù)據(jù)是由操作系統(tǒng)異步發(fā)送給對(duì)端的,操作系統(tǒng)并沒有給應(yīng)用層提供相應(yīng)確認(rèn)機(jī)制,所以應(yīng)用層無法得知socket發(fā)送緩沖區(qū)的數(shù)據(jù)何時(shí)開始發(fā)送,應(yīng)用層更無法得知socket發(fā)送緩沖區(qū)的數(shù)據(jù)是否發(fā)送成功?;谝陨显騱orkerman無法直接提消息確認(rèn)接口。

如果業(yè)務(wù)需要保證每個(gè)消息客戶端都收到,可以在業(yè)務(wù)上增加一種確認(rèn)機(jī)制。確認(rèn)機(jī)制可能根據(jù)業(yè)務(wù)不同而不同,即使同樣的業(yè)務(wù)確認(rèn)機(jī)制也可以有多種方法。

例如聊天系統(tǒng)可以用這樣的確認(rèn)機(jī)制。把每條消息都存入數(shù)據(jù)庫,每條消息都有一個(gè)是否已讀字段??蛻舳嗣渴盏揭粭l消息向服務(wù)端發(fā)送一個(gè)確認(rèn)包,服務(wù)端將對(duì)應(yīng)消息置為已讀。當(dāng)客戶端連接到服務(wù)端時(shí)(一般是用戶登錄或者斷線重連),查詢數(shù)據(jù)庫是否有未讀的消息,有的話發(fā)給客戶端,同樣客戶端收到消息后通知服務(wù)端已讀。這樣可以保證每個(gè)消息對(duì)方都能收到。當(dāng)然開發(fā)者也可以用自己的確認(rèn)邏輯。

參考手冊(cè)
http://doc.workerman.net/315165

  • 暫無評(píng)論
bijingjieshen

說的太好了!謝謝@walkor

  • 暫無評(píng)論
年代過于久遠(yuǎn),無法發(fā)表回答
??