1、為什麼在服務端設計當中需要考慮心跳
的檢測,清除死連接,即使在沒有數據來往的時候,TCP也就可以(在啟動TCP這個功能的前提下)自動發包檢測是否連接正常,這個不需要我們處理。
服務端設計心跳包的目的:
探知對端應用是否存活,服務端客戶端都可以發心跳包,一般都是客戶端發送心跳包,服務端用於判斷客戶端是否在線,從而對服務端內存緩存數據進行清理(玩家下線等);問題在於,通過TCP四次握手斷開的設定,我們也是可以通過Socket的read方法來判斷TCP連接是否斷開,從而做出相應的清理內存動作,那麼為什麼我們還需要使用客戶端發送心跳包來判斷呢?
第一種判斷客戶端是否在線策略:
直接監控TCP傳輸協議的返回值,通過返回值處理應用層的存活判斷
比如在C++當中
使用poll的IO復用方法時:
if(fds[i].revents & POLLERR)
if(fds[i].events & POLLDHUP)
通過上述判斷可以探知TCP連接的正確性從而在伺服器也關閉對應的連接
2、伺服器搭建中,心跳線的作用
心跳線是用於連接A、B兩台伺服器間的網線。在這兩台伺服器A、B中,A為工作機,B為備份機,它們之間通過一根心跳線來連接。一般在伺服器上都配有兩塊網卡,其中一塊專門用於兩台伺服器(節點)間的通訊。安裝在伺服器上的軟體通過心跳線來實時監測對方的運行狀態。一旦正在工作的主機A因為各種硬體故障,如電源失效、主要部件失效或者啟動盤失效等導致系統發生故障,心跳線會反映給互為備份的另外一台主機,主機B可以立即投入工作。這樣可以在最大限度上保證網路的正常運行。這也稱為「心跳檢測」。心跳線主要利用一條RS-233檢測鏈路來完成,採用Ping方式檢測驗證系統Down機檢測的准確性。
3、SQL服務管理器與伺服器心跳線
||US OK--> IBM X3500怎麼現實雙機熱備!_百度知道 var IKFromImport=false; | | G("log_in").src=" http://passport.baidu.com/?login&tpl=ik&u"+escape(location.href); 知道 | function ask(fn) (function()Fe.on(window,"resize",A);A();setTimeout(A,100)})(); if(!g_f_js) if (typeof(cf_h)=="function") var IknowPageModify=false;var UnloadConfirm=}};UnloadConfirm.clear=function()};UnloadConfirm.set();if(!G)return A}}function ctlSubmit(A)}function lockButton(A),3000)}function cReply(A)if(A=="no")}function fixReply(A)function showcpro(A)function ga(B,A)}}elset=h.id}if(t==a||p==a||r==a)window.open(G(a).href,"_blank")}}function ss(A)function cs()var query=(function()D.onsubmit=function()document.forms.ftop.appendChild(E(query.isChanged()));return true}}function A()return B!=document.forms.ftop.word.value}return})();function statFunc(A)function voteAnswer(A)function formSubmit(B,A),B),A||"deal")}; var url = escape(location.href); IknowLogParams["page"]="ikqb"; >
已解決
IBM X3500怎麼現實雙機熱備! 懸賞分:0 - 提問時間2008-7-14 13:222台IBM X3500裝WIN 2003企業版,SQL 2005
是一個醫院的用戶。
用戶要求,當一個伺服器出現問題,另一個伺服器馬上起來提供服
4、java如何實現客戶端與服務端的心跳機制
socket.sendUrgentData(0xFF)主要是這個
socket是這樣發送心跳的,參考一下,這是我寫過的部分代碼,專門開一個線程發送心跳
new Thread(new Runnable() {
@Override
public void run() {
while(socket!=null && !socket.isClosed()){
try {
socket.sendUrgentData(0xFF);
} catch (IOException e) {
e.printStackTrace();
reconnect();
}
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
log.info("connection is missing!"+Calendar.getInstance().getTime().getTime());
}
}).start();
5、伺服器怎麼判斷心跳包?
用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/
6、心跳伺服器連接失敗是什麼原因
解決方法:
點擊左下角開始按鈕(或者按windows鍵)彈出開始菜單。
在搜索中輸入"計算機管理",或者直接對著桌面的"計算機"點擊郵件,在彈出的菜單里點擊"管理"
系統搜索結果里找到"計算機管理",單擊它打開窗口,在窗口的左邊展開"服務與應用程序"的菜單並且點擊"服務",
在右邊的結果里找到"IP helper",(windows XP 是"IPv6 Helper Service")。 點擊"IP helper",(windows XP 是"IPv6 Helper Service")打開上圖窗口,依次把啟動類型換成"禁用",把服務狀態換為"停止",最後點確定按鈕。
重啟計算機以便設置生效
7、路由器如何向伺服器發送心跳包
這個你要和伺服器端協商介面 然後在ios這邊用線程或者nstimer來調用發送心跳的介面
8、如何向伺服器發送心跳包
這個你要和伺服器端協商介面 然後在ios這邊用線程或者nstimer來調用發送心跳的介面
/向伺服器發送心跳包 sendHeartbeatPackage(mRestMsg); count += 1; } Thread.sleep(1000 * 3); } catch (InterruptedException e)
9、心跳介面是什麼
群-HA,是連接主備伺服器的線路,主備機器之間會定時通過心跳鏈路發送心跳信號,告訴對方自己的運行狀況。
10、什麼是TCP/IP通訊中的心跳包
心跳包就是在客戶端和伺服器間定時通知對方自己狀態的一個自己定義的命令字,按照一定的時間間隔發送,類似於心跳,所以叫做心跳包。
心跳包在GPRS通信和CDMA通信的應用方面使用非常廣泛。數據網關會定時清理沒有數據的路由,心跳包通常設定在30-40秒之間。
所謂的心跳包就是客戶端定時發送簡單的信息給伺服器端告訴它我還在而已。代碼就是每隔幾分鍾發送一個固定信息給服務端,服務端收到後回復一個固定信息如果服務端幾分鍾內沒有收到客戶端信息則視客戶端斷開。
(10)伺服器心跳擴展資料:
心跳包作用:
在TCP的機制裡面,本身是存在有心跳包的機制的,也就是TCP的選項。系統默認是設置的是2小時的心跳頻率。但是它檢查不到機器斷電、網線拔出、防火牆這些斷線。而且邏輯層處理斷線可能也不是那麼好處理。一般,如果只是用於保活還是可以的。
心跳包一般來說都是在邏輯層發送空的包來實現的。下一個定時器,在一定時間間隔下發送一個空包給客戶端,然後客戶端反饋一個同樣的空包回來,伺服器如果在一定時間內收不到客戶端發送過來的反饋包,那就只有認定說掉線了。只需要send或者recv一下,如果結果為零,則為掉線。
但是,在長連接下,有可能很長一段時間都沒有數據往來。理論上說,這個連接是一直保持連接的,但是實際情況中,如果中間節點出現什麼故障是難以知道的。更要命的是,有的節點(防火牆)會自動把一定時間之內沒有數據交互的連接給斷掉。