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