⑴ 如何高效維持網路長連接:手把手教你實現 自適應的心跳保活機制
通過 長時間保持雙方連接 ,從而:
下面,我將對每種原因進行分析
當進程被殺死後,長連接也會隨之斷開
當移動客戶端網路狀態發生變化時(如移動網路 & Wifi切換、斷開、重連),也會使長連接斷開
如網路狀態差、 DHCP 的租期到期等等,都會使得長連接發生 偶然的斷開
其實,說得簡單點: 高效維持長連接的關鍵在於
整體概括如下:
這是本文的重點,下節開始會詳細解析
對國、內外主流的移動 IM 產品( WhatsApp 、 Line 、微信)進行了心跳機制的簡單分析 & 對比,具體請看下圖
下面,將根據市面上主流的心跳機制,設計 一套心跳機制方案
在下面的方案設計中,將針對這3個問題給出詳細的解決方案。
為了減少流量 & 提高發送效率,需要精簡心跳包的設計
主要從心跳包的內容 & 大小入手,設計原則具體如下
心跳包 = 1個 攜帶少量信息 & 大小在10位元組內 的信息包
為了 防止 NAT 超時 & 減少設備資源的消耗(網路流量、電量、CPU等等), 心跳發送的間隔時間 是 整個 心跳機制方案設計的重點。
心跳發送間隔時間的設計原則如下
下面,我將詳細講解 自適應心跳間隔時間 的設計方案
1.如何自適應計算心跳間隔 從而使得心跳間隔 接近 當前 NAT 超時時間?
註:只有當心跳間隔 接近 NAT 超時時間 時, 才能最大化平衡 長連接不中斷 & 設備資源消耗最低的問題 。
2.如何檢測 當前網路環境的 NAT 超時時間 發生了變化 ?
註:在檢測到 NAT 超時時間 發生變化後,重新自適應計算心跳間隔 從而使得心跳間隔 接近 NAT 超時時間
該機制的核心在於, 如何 判斷長連接的有效性
在網上流傳著一些用於判斷長連接是否有效的方案,具體介紹如下
至此,關於心跳保活機制已經講解完畢。
很多人認為, TCP 協議自身就有 KeepAlive 機制,為何基於它的通訊鏈接,仍需 在應用層實現額外的心跳保活機制 ?
先來看看 KeepAlive 機制 是什麼
KeepAlive 的機制 不可 替代心跳機制 的具體原因如下:
KeepAlive 機制無法代替心跳機制, 需要在應用層 自己實現心跳機制以檢測長連接的有效性,從而高效維持長連接
不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度 。
⑵ 網路連接中的長連接和短鏈接是什麼意思
短連接
連接->傳輸數據->關閉連接
比如HTTP是無狀態的的短鏈接,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
具體就是:瀏覽器client發起並建立TCP連接 -> client發送HttpRequest報文 -> server接收到報文->server handle並發送HttpResponse報文給前端,發送完畢之後立即調用socket.close方法
->client接收response報文->client最終會收到server端斷開TCP連接的信號->client 端斷開TCP連接,具體就是調用close方法。
也可以這樣說:短連接是指SOCKET連接後,發送接收完數據後馬上斷開連接。
因為連接後接收了數據就斷開了,所以每次數據接受處理不會有聯系。 這也是HTTP協議無狀態的原因之一。
長連接
連接->傳輸數據->保持連接 -> 傳輸數據-> ...........->直到一方關閉連接,多是客戶端關閉連接。
長連接指建立SOCKET連接後不管是否使用都保持連接,但安全性較差。
HTTP在短鏈接和長連接上的選擇:
HTTP是無狀態的 ,也就是說,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話
HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連接支持(貌似最新的HTTP1.1 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。
如果瀏覽器或者伺服器在其頭信息加入了這行代碼 Connection:keep-alive
TCP連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了帶寬。
實現長連接要客戶端和服務端都支持長連接。
什麼時候用長連接,短連接?
長連接多用於操作頻繁,點對點的通訊,而且連接數不能太多情況。
每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。
例如:資料庫的連接用長連接, 如果用短連接頻繁的通信會造成socket錯誤,而且頻繁的socket 創建也是對資源的浪費。
像WEB網站的http服務一般都用短鏈接,因為長連接對於服務端來說會耗費一定的資源,而像WEB網站這么頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源,如果用長連接,而且同時有成千上萬的用戶,如果每個用戶都佔用一個連接的話,那可想而知吧。所以並發量大,但每個用戶無需頻繁操作情況下需用短連好。
總之,長連接和短連接的選擇要視情況而定。
⑶ 安卓網路編程中長連接怎麼實現
double sinx(double x)
{
double result=x,temp=x;
double den=x,fac=1;
int n=1,sign=1;
while((temp>1e-5)||(temp<-1e-5))
{
n++,fac*=n,den*=x;
n++,fac*=n,den*=x;
temp=den/fac;sign=-sign;
result=sign>0?result+temp:result-temp;
}
return result;
}
double cosx(double x)
{
x=1.57079-x;
return sinx(x);
}
main()
{
double a,b,c;
scanf("%lf",&a);
b=sinx(a);
c=cosx(a);
printf("sin(%lf)=%lf,cos(%lf)=%lf",a,b,a,c);
}
⑷ 多重網路怎麼設置
怎麼設置win7多重網路
1、高哪打開「網路和共享中心」。
2、點擊窗口左上角第三行的「更改適配器設置」。
3、出現「網路連接」對話框,右鍵點擊「本地連接」,選擇「屬性」,在「網路」選項卡下,將「此連接使用下列選項」下面各選項前面的√去掉,只剩下「QoS數據包計劃程序」這個選項前面打√。然後「確定」。
4、重新連接「寬頻連接」以及無線,這樣就是「多重網路」了。
Win7中多重網路如何解決
1.開「控制面板\網路和 Internet\網路和共享中心」,在「查看活動網路」下有多個圖標,這就是所謂的「多重網路」,隨便找一個點進去,點「合並或刪除網路位置」,刪除本地連接意外的全部網路接連;
2.重新連接網路時,選擇已有網路接連,切記不可新建網路連接,否則還會出現「多重網路」;
3.若還有「多重網路」,點擊網路連接圖片,選擇「合並或刪除網路位置」。
我的電腦怎麼設置連接怎麼是多重網路
1.點擊開始-控制面板
如圖,點擊開始-控制面板。
2.網路和Internet
如圖,點擊網路和Internet。
3.網路和共享中心
如圖,點擊網路和共享中心,進行多重網路的合並和刪除。
4.點擊(代表工作網路的)圖標
如圖,這里以工作網路為例,點擊工作網路的圖標,紅色框區域,進行多重網路的合並和刪除。
5.合並或刪除網路位置
如圖,進入設置網路屬性的對話框,然後點擊合並或刪除網路位置,進行多重網路的合並和刪除。
6.選中合並的網路
如圖,這里是獵豹無線網和網路2合並,先選中合並的網路(獵豹),然後點擊合並。
7.網路2
點擊網路2,然後點擊確定,進行多重網路的合並和刪除。最終效果圖如下。這時合並了多重網路,出現本地連接和無線網連接。
8.確保本地連接和無線網連接
確保本地連接和無線網連接的Internet協議都勾選,如圖所示,這時多重網路的問題就搞定了
win7多重網路怎麼解決,win7多重網路是什麼意思?
不用理睬,它並不會影響到你上網,多重網路只是代表著你可能有多種網路環境,比如像我的機器上還安裝著Vmware虛擬機,我的WIN7就顯示著多重網路,因為還有Vm定are網路環境的存在。
多重網路怎麼解決? 5分
1.打開電腦桌面,點擊開始-控制面板。
2.點擊網路和Internet。
3.點擊網路和共享中心,進行多重網路的合並和刪除。
4.點擊工作網路的圖標,紅色框區域,進行多重網路的合並和刪除。
5.進入設置網路屬性的對話框,然後點擊合並或刪除網路位置,進行多重網路的合並和刪除。
6.會出現對話框顯示無線網和網路2合並,選中合並的網路,然後點擊合並。
7.然後出現對話框,點擊網路2,然後點擊確定,進行多重網路的合並和刪除,這時合並了多重網路,出現本地連接和無線網連接。
8.確保本地連接和無線網連接的Internet協議都勾選,這時多重網路的問題就能解決。
多重網路:戚扒碼
指包括使用各不相同的通信媒體的一個以上的網路群組,對網路駭組內存在的多個家電器件進行整合控制的網路管理器。
對網路群組內存在的多個家電器件進行整合控制的網路管理器;將從各網路群組接收的數據進行轉換並傳送給網路管理器,同時將從網路管理器接收的數據轉換為適合於各網路群組的數據並進行傳送,從而在使用各不相同的通信媒體的網路群組之間實現通信連接的通信媒體轉換器。
我的電腦打開網路共享中心怎麼顯示多重網路
系統里有多個網卡,禁用一些只剩一個的時候就不是多重網路了。虛擬網卡也需要禁用。
如何設置多重網關?
1.在第一台電腦安裝homeshare 在homeshare裡面設置網關ip和dns等信息
2.第二台電腦到tcp/ip屬性設置 網關寫第一個homeshare里的網關地址,裝上homeshare並填寫相關信息 網關項可以和第一個homeshare不同
3.以此類推,設置其他的電腦
WIN7中多重網路怎麼刪除?
點到 更改適配器設置(如下圖片的左面此信有 那個選項) 然後進裡面刪除就行 刪不了得話 禁用了也行
怎麼把多重網路關掉(高手進來) 50分
1.你的電腦里是不是裝了Adobe 公司的CS3版本的軟體?CS3系列軟體自帶了一款與windows 7不兼容的音樂分享軟體,並且在添加了系統服務項「##Id_String1.6844F930_1628_4223_B5CC_5BB94B879762##」,它對應的文件是:C:\Program Files\Bonjourm\mDNSResponder.exe,會導致這種問題。
解決方法:禁用「##Id_String1.6844F930_1628_4223_B5CC_5BB94B879762##」服務,刪除 Bonjourm文件夾。做法:我的電腦右鍵-》管理-》服務和應用程序-》服務(或 控制面板-》管理-》服務)
2.如果是你的電腦有兩個網卡,那禁用掉下面那個無法連接到網路的「本地連接」就好了。做法:點擊左邊的「更改適配器設置」,把顯示為「未識別的網路」的本地連接禁用就可以了。
怎麼在WIN7下關閉多重網路啊,急
你把設配器中的無關網路關閉掉就可以了,無法順利關閉的話道設備管理器裡面關閉設備。
⑸ 如何設置網路連接 設置網路連接的方法
1、通過控制面板或者點擊桌面上寬頻連接的圖標進入「網路共享中心」。
2、在網路與共享中心裡點擊「更改網路設置」里的「設置新的連接或網路」。
3、選擇「連接到Internet」點擊下一步。
4、選擇「仍要設置新連接」,選擇創建新連接,出現連接方式選擇項,選擇寬頻連接,輸入正確的寬頻連接帳號密碼,新連接的名稱可以自己設置,開始連接網路。
5、連接成功後打開控制面板中的網路與共享中心。
6、點擊「更改適配器設置」,找到剛才創立的網路連接方式。
7、滑鼠右鍵點擊該圖標,在選擇欄點擊創建快捷方式就可以在電腦桌面上直接使用該網路連接方式了。