當前位置:首頁 » 雲伺服器 » web伺服器長連接怎麼實現

web伺服器長連接怎麼實現

發布時間: 2022-05-07 17:43:37

① 如何實現android和伺服器的長連接

轉載 這種功能實際上就是數據同步,同時要考慮手機本身、電量、網路流量等等限制因素,所以通常在移動端上有一下兩個解決方案:

1.一種是定時去server查詢數據,通常是使用HTTP協議來訪問web伺服器,稱Polling(輪詢);

2.還有一種是移動端和伺服器建立長連接,使用XMPP長連接,稱Push(推送)。

從耗費的電量、流量和數據延遲性各方面來說,Push有明顯的優勢。但是使用Push的缺點是:

對於客戶端:實現和維護相對成本高,在移動無線網路下維護長連接,相對有一些技術上的開發難度。

對於伺服器:如何實現多核並發,cpu作業調度,數量龐大的長連接並發維護等技術,仍存在開發難點。

在講述Push方案的原理前,我們先了解一下移動無線網路的特點。

移動無線網路的特點:

因為 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要連接 Internet,就需要通過運營商的網關做一個網路地址轉換(Network Address Translation,NAT)。簡單的說運營商的網關需要維護一個外網 IP、埠到內網 IP、埠的對應關系,以確保內網的手機可以跟 Internet 的伺服器通訊

GGSN(Gateway GPRS

Support Node 網關GPRS支持結點)模塊就實現了NAT功能。

因為大部分移動無線網路運營商都是為了減少網關的NAT映射表的負荷,所以如果發現鏈路中有一段時間沒有數據通訊時,會刪除其對應表,造成鏈路中斷。(關於NAT的作用及其原理可以查看我的另一篇博文:關於使用UDP(TCP)跨區域網,NAT穿透的心得)

Push在Android平台上長連接的實現:

既然我們知道我們移動端要和Internet進行通信,必須通過運營商的網關,所以,為了不讓NAT映射表失效,我們需要定時向Internet發送數據,因為只是為了不然NAT映射表失效,所以只需發送長度為0的數據即可。

這時候就要用到定時器,在android系統上,定時器通常有一下兩種:

1.java.util.Timer

2.android.app.AlarmManager

分析:

Timer:可以按照計劃或者時間周期來執行相關的任務。但是Timer需要用WakeLock來讓CPU保持喚醒狀態,才能保證任務的執行,這樣子會消耗大量流量;當CPU處於休眠的時候,就不能喚醒執行任務,所以應用於移動端明顯是不合適。

AlarmManager:AlarmManager類是屬於android系統封裝好來管理RTC模塊的管理類。這里就涉及到RTC模塊,要更好地了解兩者的區別,就要明白兩者真正的區別。

RTC(Real- Time Clock)實時鬧鍾在一個嵌入式系統中,通常採用RTC

來提供可靠的系統時間,包括時分秒和年月日等;而且要求在系統處於關機狀態下它也能夠正常工作(通常採用後備電池供電),它的外圍也不需要太多的輔助電路,典型的就是只需要一個高精度的32.768KHz

晶體和電阻電容等。(如果對這方面感興趣,可以自己查閱相關資料,這里就說個大概)

好了,回來正題。所以,AlarmManager又稱全局定時鬧鍾。這意味著,當我用使用AlarmManager來定時執行任務,CPU可以正常地休眠,只有在執行任務是,才喚醒CPU,這個過程是很短時間的。

下面簡單來說明其使用:

1.類似於Timer功能:

//獲得鬧鍾管理器

AlarmManager

am = (AlarmManager)getSystemService(ALARM_SERVICE);

//設置任務執行計劃

am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000,

sender);//從firstTime才開始執行,每隔5秒再執行

2.實現全局定時功能:

//獲得鬧鍾管理器

AlarmManager

am = (AlarmManager)getSystemService(ALARM_SERVICE);

//設置任務執行計劃

am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,

5*1000, sender);//從firstTime才開始執行,每隔5秒再執行

總結:在android客戶端使用Push推送時,應該使用AlarmManager來實現心跳功能,使其真正實現長連接。

② HttpWebRequest怎麼長連接

HTTP是無狀態的
也就是說,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話
HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連接支持(貌似最新的 http1.0 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。
如果瀏覽器或者伺服器在其頭信息加入了這行代碼
Connection:keep-alive
TCP連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了帶寬。
實現長連接要客戶端和服務端都支持長連接。
所謂長連接指建立SOCKET連接後不管是否使用都保持連接,但安全性較差,
所謂短連接指建立SOCKET連接後發送後接收完數據後馬上斷開連接,一般銀行都使用短連接
短連接:比如
http
的,只是連接、請求、關閉,過程時間較短
,
伺服器若是一段時間內沒有收到請求即可關
閉連接。

長連接:有些服務需要長時間連接到伺服器,比如
CMPP
,一般需要自己做在線維持。

最近在看
「
伺服器推送技術
」
,在
B/S
結構中,通過某種
magic
使得客戶端不需要通過輪詢即可以得到服務
端的最新信息(比如股票價格)
,這樣可

以節省大量的帶寬。

傳統的輪詢技術對伺服器的壓力很大,
並且造成帶寬的極大浪費。如果改用
ajax
輪詢,可以降低帶寬的負荷
(因為伺服器返回的不是完整頁面)
,
但是對伺服器

的壓力並不會有明顯的減少。

而推技術(
push
)可以改善這種情況。但因為
HTTP
連接
的特性(短暫,必須由客戶端發起)
,使得推技術的實現比較困難,常見的做法是通過延長
http
連接的壽
命
,
來實現
push
。

接下來自然該討論如何延長
http
連接的壽命
,
最簡單的自然是死循環法
:

【
servlet
代
碼
片
段
】

public
void
doGet(Request
req,
Response
res)
{
PrintWriter
out
=
res.getWriter();
……

正
常
輸
出
頁
面

……

③ PHP中如何實現與伺服器的長連接呢

正在做web聊天?要用到長連接現在的理解是?AJAX請求? PHP頁面做一個循環?一直循環?直到聊天記錄更新?返回數據?AJAX再請求....不知道這樣理解正確不?還有沒有其他解決辦法高手指點

④ 請教JAVA如何實現web下的長連接

現在,使用websocket ,,,,,,,,,。。。。。。。。。。。

⑤ ningx伺服器怎麼保證長連接

這種功能實際上就是數據同步,同時要考慮手機本身、電量、網路流量等等限制因素,所以通常在移動端上有一下兩個解決方案: 1.一種是定時去server查詢數據,通常是使用HTTP協議來訪問web伺服器,稱Polling(輪詢); 2.還有一種是移動端和伺服器建立長連接,使用XMPP長連接,稱Push(推送)。 從耗費的電量、流量和數據延遲性各方面來說,Push有明顯的優勢。但是使用Push的缺點是: 對於客戶端:實現和維護相對成本高,在移動無線網路下維護長連接,相對有一些技術上的開發難度。 對於伺服器:如何實現多核並發,cpu作業調度,數量龐大的長連接並發維護等技術,仍存在開發難點。 在講述Push方案的原理前,先了解一下移動無線網路的特點。 移動無線網路的特點: 因為 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要連接 Internet,就需要通過運營商的網關做一個網路地址轉換(Network Address Translation,NAT)。簡單的說運營商的網關需要維護一個外網 IP、埠到內網 IP、埠的對應關系,以確保內網的手機可以跟 Internet 的伺服器通訊 GGSN(Gateway GPRS Support Node 網關GPRS支持結點)模塊就實現了NAT功能。 因為大部分移動無線網路運營商都是為了減少網關的NAT映射表的負荷,所以如果發現鏈路中有一段時間沒有數據通訊時,會刪除其對應表,造成鏈路中斷。 Push在Android平台上長連接的實現: 既然自己知道自己移動端要和Internet進行通信,必須通過運營商的網關,所以,為了不讓NAT映射表失效,咋們需要定時向Internet發送數據,因為只是為了不然NAT映射表失效,所以只需發送長度為0的數據即可。 這時候就要用到定時器,在android系統上,定時器通常有一下兩種: 1.java.util.Timer 2.android.app.AlarmManager 分析: Timer:可以按照計劃或者時間周期來執行相關的任務。但是Timer需要用WakeLock來讓CPU保持喚醒狀態,才能保證任務的執行,這樣子會消耗大量流量;當CPU處於休眠的時候,就不能喚醒執行任務,所以應用於移動端明顯是不合適。 AlarmManager:AlarmManager類是屬於android系統封裝好來管理RTC模塊的管理類。這里就涉及到RTC模塊,要更好地了解兩者的區別,就要明白兩者真正的區別。 RTC(Real- Time Clock)實時鬧鍾在一個嵌入式系統中,通常採用RTC 來提供可靠的系統時間,包括時分秒和年月日等;而且要求在系統處於關機狀態下它也能夠正常工作(通常採用後備電池供電),它的外圍也不需要太多的輔助電路,典型的就是只需要一個高精度的32.768KHz 晶體和電阻電容等。(如果對這方面感興趣,可以自己查閱相關資料,這里就說個大概) 好了,回來正題。所以,AlarmManager又稱全局定時鬧鍾。這意味著,當自己用使用AlarmManager來定時執行任務,CPU可以正常地休眠,只有在執行任務是,才喚醒CPU,這個過程是很短時間的。 下面簡單來說明其使用: 1.類似於Timer功能: //獲得鬧鍾管理器 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); //設置任務執行計劃 am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000, sender);//從firstTime才開始執行,每隔5秒再執行 2.實現全局定時功能: //獲得鬧鍾管理器 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); //設置任務執行計劃 am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender);//從firstTime才開始執行,每隔5秒再執行 總結:在android客戶端使用Push推送時,應該使用AlarmManager來實現心跳功能,使其真正實現長連接。

⑥ 如何實現android和伺服器長連接

前言:現在的大多數移動端應用都有實時得到消息的能力,簡單來說,有發送消息的主動權和接受消息的被動權。例如:微信,QQ,天氣預報等等,相信好處和用戶體驗相信大家都知道吧。

提出問題:這種功能必須涉及client(客戶端)和server(伺服器),所以到底client如何和server實現實時連接通訊?

分析問題:這種功能實際上就是數據同步,同時要考慮手機本身、電量、網路流量等等限制因素,所以通常在移動端上有一下兩個解決方案:
1.一種是定時去server查詢數據,通常是使用HTTP協議來訪問web伺服器,稱Polling(輪詢);
2.還有一種是移動端和伺服器建立長連接,使用XMPP長連接,稱Push(推送)。

從耗費的電量、流量和數據延遲性各方面來說,Push有明顯的優勢。但是使用Push的缺點是:
對於客戶端:實現和維護相對成本高,在移動無線網路下維護長連接,相對有一些技術上的開發難度。
對於伺服器:如何實現多核並發,cpu作業調度,數量龐大的長連接並發維護等技術,仍存在開發難點。轉載,僅供參考。
​

⑦ java 怎麼實現http1.1中規定的pipeline的長連接

目前web上的消息通訊方式主要有以下幾種。
輪詢,長連接,websocket
輪詢:隔一段時間訪問伺服器,伺服器不管有沒有新消息都立刻返回。
長連接:頁面向伺服器發出請求,由伺服器決定什麼時候返回。(如果有新消息則立刻返回,沒有的話就保持連接,直到有新消息才返回)
websocket:類似Java Socket,由Http請求模擬實現的socket。

要實現長連接的關鍵就是: 由伺服器端決定什麼時候返回數據。比如在servlet中。

doGet(...){
...
Thread.sleep(30000);
return ...
}
這就是一個長連接的例子,只是沒有任何意義而已。

你要做的就是在doGet中阻塞住,
while(!hasNewMsg){
sleep(500)
}
return newMsg...

當然你的ajax超時時間要設置長一點。

如果可以的話,最好可以使用websocket。

⑧ 請教JAVA如何實現web下的長連接關鍵後台如何寫

之前在ITjob老師那邊講過常連接的設置可以在web容器中完成,下面是weblogic的場連接設置

一、進入services-JDBC Connection Pools->sysConfig,然後點Connections標簽,點

二、點Advanced Options的Show

三、把一下三個打勾保存

可能的原因:
Web伺服器與資料庫之間有一個安全防火牆,這個防火牆會定期檢查連接,如果某個連接長時間(30分鍾)沒有數據流過,就會被關閉。通過以上設置後保證了資料庫連接不會被斷開

⑨ PHP中如何實現與伺服器的長連接呢 - PHP進階討論

使用socket_create()方法創建一個socket對象,但是當當前腳本執行完以後,這個socket就被釋放掉了,自然連接也就被關閉了。

⑩ 瀏覽器和web伺服器是如何建立連接的

在HTTP/1.0中,默認使用的是短連接。也就是說,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。如果客戶端瀏覽器訪問的某個HTML或其他類型的 Web頁中包含有其他的Web資源,如JavaScript文件、圖像文件、CSS文件等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。
但從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭有加入這行代碼:

Connection:keep-alive

在使用長連接的情況下,當一個網頁打開完成後,客戶端和伺服器之間用於傳輸HTTP數據的 TCP連接不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間。實現長連接要客戶端和服務端都支持長連接。
HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。

我們模擬一下TCP短連接的情況,client向server發起連接請求,server接到請求,然後雙方建立連接。client向server 發送消息,server回應client,然後一次讀寫就完成了,這時候雙方任何一個都可以發起close操作,不過一般都是client先發起 close操作。為什麼呢,一般的server不會回復完client後立即關閉連接的,當然不排除有特殊的情況。從上面的描述看,短連接一般只會在 client/server間傳遞一次讀寫操作
短連接的優點是:管理起來比較簡單,存在的連接都是有用的連接,不需要額外的控制手段

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:1546
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1785
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:1557
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:1652
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:1494
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1910
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:1074
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:1003
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:1637
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:1770