长连接心跳机制理解
近期使用go 開(kāi)發(fā)聊天室,使用到websocket常鏈接。
if err = websocket.JSON.Receive(ws,&reply); err != nil {log.Println(err)return }我發(fā)現(xiàn)當(dāng)連接斷開(kāi)的時(shí)候會(huì)走if里面,輸出eof
這樣就知道,客戶端斷開(kāi)了連接。
但在之前使用workerman 中發(fā)現(xiàn)其中有一塊是《心跳機(jī)制》,這個(gè)心跳機(jī)制也是判斷鏈接是否斷開(kāi)。
所以我就覺(jué)得判斷鏈接是否斷開(kāi)了,這個(gè)功能是不是重復(fù)了。或者心跳機(jī)制是不是多余的。(個(gè)人理解)
先說(shuō)下我查閱資料得到的對(duì)心跳機(jī)制的理解
心跳機(jī)制是客戶端,自己發(fā)送心跳包給服務(wù)端來(lái)檢測(cè)鏈接是否正常。大致方法是在客戶端寫(xiě)一個(gè)定時(shí)器,定時(shí)向服務(wù)端發(fā)送一個(gè)短小精悍的包。然后服務(wù)端接收到包再返回給客戶端一條信息。每次一套:客戶端發(fā)送包->服務(wù)端接收返回相應(yīng)->客戶端接受相應(yīng);正常執(zhí)行,表示該鏈接正常。否則則認(rèn)為斷線。
心跳包會(huì)像心跳一樣每隔固定時(shí)間發(fā)送一次。
理解來(lái)源:http://www.codeweblog.com/socket%E5%BF%83%E8%B7%B3%E5%8C%85%E6%9C%BA%E5%88%B6/
對(duì)于服務(wù)端中獲取斷線輸出eof和心跳機(jī)制個(gè)人理解
可能是如果只是通過(guò)服務(wù)端來(lái)判斷鏈接是否正常,是不穩(wěn)定的,或者只通過(guò)服務(wù)端判斷鏈接是否正常的話無(wú)法控制客戶端斷線后的提示、操作。所以在客戶端也需要一個(gè)心跳機(jī)制,雙重判斷鏈接是否正常。這樣當(dāng)鏈接斷開(kāi)后,服務(wù)端可以有操作(刪除服務(wù)端在線列表中該用戶等),客戶端也可以有操作(重新發(fā)送登錄請(qǐng)求,或提示用戶等),這樣既可以保證程序的正常使用,也可以提高用戶體驗(yàn)。
個(gè)人觀點(diǎn)!
轉(zhuǎn)載于:https://www.cnblogs.com/jackylee92/p/6207473.html
總結(jié)
- 上一篇: iPhone屏幕尺寸/launch尺寸/
- 下一篇: JDK的目录结构及结构图