1、伺服器怎麼判斷心跳包?
用sendUrgentData這個來判斷服務端是否異常關閉
想實現自動連接服務端,如果用
socket = new Socket("192.168.1.4",1821);
socket.connect();
只有每次去new創建這個sock對象,因為只有sock對象創建好了才由輸入輸出流
目前的實現方式就是,
1.在原有的基礎上,再開多一個線程,專門負責發送心跳,
2.先睡眠500毫秒,
3.用socket.sendUrgentData(FF),給服務端,
4.如果服務端異常關閉的話,我就捕捉這個異常。。。
5.循環
心跳的意思就是每隔一段時間,客戶端給伺服器發一段消息:
1、客戶端:伺服器,我還活著,你死了沒
2、伺服器:客戶端,我知道你還活著這個信息,我已經記錄下來了,同時告訴你我也還活著
更多問題到問題求助專區http://bbs.hounwang.com/
2、心跳機制的概念介紹
網路中的接收和發送數據都是使用操作系統中的SOCKET進行實現。但是如果此套接字已經斷開,那發送數據和接收數據的時候就一定會有問題。可是如何判斷這個套接字是否還可以使用呢?這個就需要在系統中創建心跳機制。其實TCP中已經為我們實現了一個叫做心跳的機制。如果你設置了心跳,那TCP就會在一定的時間(比如你設置的是3秒鍾)內發送你設置的次數的心跳(比如說2次),並且此信息不會影響你自己定義的協議。所謂「心跳」就是定時發送一個自定義的結構體(心跳包或心跳幀),讓對方知道自己「在線」。 以確保鏈接的有效性。
所謂的心跳包就是客戶端定時發送簡單的信息給伺服器端告訴它我還在而已。代碼就是每隔幾分鍾發送一個固定信息給服務端,服務端收到後回復一個固定信息如果服務端幾分鍾內沒有收到客戶端信息則視客戶端斷開。比如有些通信軟體長時間不使用,要想知道它的狀態是在線還是離線就需要心跳包,定時發包收包。發包方:可以是客戶也可以是服務端,看哪邊實現方便合理。一般是客戶端。伺服器也可以定時輪詢發心跳下去。心跳包之所以叫心跳包是因為:它像心跳一樣每隔固定時間發一次,以此來告訴伺服器,這個客戶端還活著。事實上這是為了保持長連接,至於這個包的內容,是沒有什麼特別規定的,不過一般都是很小的包,或者只包含包頭的一個空包。
在TCP的機制裡面,本身是存在有心跳包的機制的,也就是TCP的選項。系統默認是設置的是2小時的心跳頻率。但是它檢查不到機器斷電、網線拔出、防火牆這些斷線。而且邏輯層處理斷線可能也不是那麼好處理。一般,如果只是用於保活還是可以的。心跳包一般來說都是在邏輯層發送空的包來實現的。下一個定時器,在一定時間間隔下發送一個空包給客戶端,然後客戶端反饋一個同樣的空包回來,伺服器如果在一定時間內收不到客戶端發送過來的反饋包,那就只有認定說掉線了。只需要send或者recv一下,如果結果為零,則為掉線。
但是,在長連接下,有可能很長一段時間都沒有數據往來。理論上說,這個連接是一直保持連接的,但是實際情況中,如果中間節點出現什麼故障是難以知道的。更要命的是,有的節點(防火牆)會自動把一定時間之內沒有數據交互的連接給斷掉。在這個時候,就需要我們的心跳包了,用於維持長連接,保活。在獲知了斷線之後,伺服器邏輯可能需要做一些事情,比如斷線後的數據清理呀,重新連接呀當然,這個自然是要由邏輯層根據需求去做了。總的來說,心跳包主要也就是用於長連接的保活和斷線處理。一般的應用下,判定時間在30-40秒比較不錯。如果實在要求高,那就在6-9秒。
網路上一個簡單的示意圖:
3、心跳線是什麼
所謂的心跳線其實就是用來檢查其它結點狀態的專用結路.
在一般的windows伺服器上這條線可以是一條RJ45跳線.
在IBM小機或是大機里這條線可能是專用的串口線也可能是SCSI線,這兩種方式對於心跳信息的傳輸會更有保障.
如果是做windows雙機熱備,這條線不用理論上來說應該是可以的.但是在實際中來說,我們最好是把應用網段和心跳網段劃分為兩個不同的網路,這樣更可靠一些.所以一般做雙機的伺服器是至少兩塊網卡,一塊接應用,一塊專門是心跳.
4、心跳伺服器連接失敗是什麼原因
解決方法:
點擊左下角開始按鈕(或者按windows鍵)彈出開始菜單。
在搜索中輸入"計算機管理",或者直接對著桌面的"計算機"點擊郵件,在彈出的菜單里點擊"管理"
系統搜索結果里找到"計算機管理",單擊它打開窗口,在窗口的左邊展開"服務與應用程序"的菜單並且點擊"服務",
在右邊的結果里找到"IP helper",(windows XP 是"IPv6 Helper Service")。 點擊"IP helper",(windows XP 是"IPv6 Helper Service")打開上圖窗口,依次把啟動類型換成"禁用",把服務狀態換為"停止",最後點確定按鈕。
重啟計算機以便設置生效
5、android 心跳包伺服器怎麼寫
後台開啟一個線程一直運行,每隔1分鍾左右發送一個心跳報文給伺服器,以確保時刻跟伺服器鏈接。若超過3次伺服器未對客戶端發送的心跳報文做出回應則重新鏈接。 如果這么作的話,必須確保和伺服器達成一定的應用層協議。
6、什麼是TCP/IP通訊中的心跳包
心跳包就是在客戶端和伺服器間定時通知對方自己狀態的一個自己定義的命令字,按照一定的時間間隔發送,類似於心跳,所以叫做心跳包。
心跳包在GPRS通信和CDMA通信的應用方面使用非常廣泛。數據網關會定時清理沒有數據的路由,心跳包通常設定在30-40秒之間。
所謂的心跳包就是客戶端定時發送簡單的信息給伺服器端告訴它我還在而已。代碼就是每隔幾分鍾發送一個固定信息給服務端,服務端收到後回復一個固定信息如果服務端幾分鍾內沒有收到客戶端信息則視客戶端斷開。
(6)心跳伺服器擴展資料:
心跳包作用:
在TCP的機制裡面,本身是存在有心跳包的機制的,也就是TCP的選項。系統默認是設置的是2小時的心跳頻率。但是它檢查不到機器斷電、網線拔出、防火牆這些斷線。而且邏輯層處理斷線可能也不是那麼好處理。一般,如果只是用於保活還是可以的。
心跳包一般來說都是在邏輯層發送空的包來實現的。下一個定時器,在一定時間間隔下發送一個空包給客戶端,然後客戶端反饋一個同樣的空包回來,伺服器如果在一定時間內收不到客戶端發送過來的反饋包,那就只有認定說掉線了。只需要send或者recv一下,如果結果為零,則為掉線。
但是,在長連接下,有可能很長一段時間都沒有數據往來。理論上說,這個連接是一直保持連接的,但是實際情況中,如果中間節點出現什麼故障是難以知道的。更要命的是,有的節點(防火牆)會自動把一定時間之內沒有數據交互的連接給斷掉。
7、什麼是心跳交換機
2個交換機互為熱備,如果有一台交換機出故障不能正常工作,系統將自動切換到另外一台交換機上.這樣的交換機叫心跳交換機
8、討論一個問題,為什麼socket.io的心跳是從伺服器主動發到客戶端
在網路通信中,經常使用心跳方案,目的是通過心跳來驗證對方是否在線。
具有實施時,根據具體要求,有幾種選擇:
1)客戶端主動發送心跳信息到伺服器;
2)伺服器主動發送心跳信息到客戶端;
3)客戶端與伺服器之間相互向對方發送信息信息。
產生心跳信息並發送給對方的目的是告訴對方「我還在線!」。
所以,伺服器主動發送心跳,那意思是:伺服器在線,仍在提供服務!