1. 程式人生 > >Android和伺服器長連線

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來實現心跳功能,使其真正實現長連線。

相關推薦

Android伺服器連線

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

如何實現android伺服器連線呢?推送訊息的原理

GGSN(Gateway GPRS Support Node 閘道器GPRS支援結點)模組就實現了NAT功能。因為大部分移動無線網路運營商都是為了減少閘道器的NAT對映表的負荷,所以如果發現鏈路中有一段時間沒有資料通訊時,會刪除其對應表,造成鏈路中斷。(關於NAT的作用及其原理可以檢視我的另一篇博文:關於使用

Android開發】如何實現android伺服器連線呢?推送訊息的原理

GGSN(Gateway GPRS Support Node 閘道器GPRS支援結點)模組就實現了NAT功能。因為大部分移動無線網路運營商都是為了減少閘道器的NAT對映表的負荷,所以如果發現鏈路中有一段時間沒有資料通訊時,會刪除其對應表,造成鏈路中斷。(關於NAT的作用及其原理可以檢視我的另一篇博文:關於使用

Android開發】如何實現android伺服器連線呢?

GGSN(Gateway GPRS Support Node 閘道器GPRS支援結點)模組就實現了NAT功能。因為大部分移動無線網路運營商都是為了減少閘道器的NAT對映表的負荷,所以如果發現鏈路中有一段時間沒有資料通訊時,會刪除其對應表,造成鏈路中斷。(關於NAT的作用及其原理可以檢視我的另一篇博文:關於使用

如何實現android伺服器保持連線

            這種功能實際上就是資料同步,同時要考慮手機本身、電量、網路流量等等限制因素,所以通常在移動端上有一下兩個解決方案:   1.一種是定時去server查詢資料,通常是使用HTTP協議來訪問web伺服器,稱Polli

androidIOS連接區別

csdn 等等 一個 bsp 存在 服務 我們 長連接 基礎 http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 首先我們必須知道,所有的推送功能必須有一個客戶端和服務器的長連接,因為推送是由服務器主動向客戶

Android實現Socket連線 , OkSocket框架簡單使用

一個Android輕量級Socket通訊框架,既OkHttp後又一力作. 框架開源地址: https://github.com/xuuhaoo/OkSocket OkSocket簡介 Android OkSocket是一款基於阻塞式傳統Socket的一款Socket客戶端整體解決方案.您

Android架構之連線技術

本文首發於小專欄《Android 架構之長連線技術》,更多Android架構文章歡迎關注《億級Android架構》 上一篇文章《Android 架構之網路框架(上)》中,我們談過了網路框架OkHttp、網路加速方案如HttpDNS、資料壓縮與序列化等技術點。本文我們結合騰訊Mars框架和美團Sha

Springboot 整合Websocket 註解開發之第一步瀏覽器伺服器建立連線(解決了建立連線時404錯誤!!!!)

1、建立一個springboot專案 勾選web和websocket選項      建立完成後build.gradle檔案如下,主要是依賴得新增上(另外說明以下compile('org.springframework.boot:spring-boot-starter-w

網路程式設計進行客戶端伺服器連線

網路程式設計 自從網際網路誕生以來,現在基本上所有的程式都是網路程式,很少有單機版的程式了。計算機網路就是把各個計算機連線到一起,讓網路中的計算機可以互相通訊。網路程式設計就是如何在程式中實現兩臺計算機的通訊。網路程式設計對所有開發語言都是一樣的,Python也不例外。用Py

Android 使用Socket實現伺服器與手機客戶端的連線

一、傳送請求的資訊: 1、介面 public interface Request { String getData(); } 2、文字請求: public class TextRequest implements Request{

Android通過WebSocket建立一個連線(帶心跳檢測)從伺服器端接收訊息

   最近公司要做一款內部使用的工具類app,方便銷售部門打電話(其實就是在後臺有好多使用者資料,之前銷售部門同事撥打電話,需要自己從銷售後臺檢視使用者手機號等資訊,然後自己拿自己手機撥號,然後打出去。現在想實現銷售的同事,點選銷售後臺的按鈕,自己的手機直接撥號的功能)。為此

Android-經典藍芽(BT)-建立連線傳輸短訊息檔案

一.藍芽模組簡介 從藍芽4.0開始包含兩個藍芽晶片模組:傳統/經典藍芽模組(Classic Bluetooth,簡稱BT)和低功耗藍芽(Bluetooth Low Energy,簡稱BLE) 經典藍芽是在之前的藍芽1.0,1.2,2.0+E

什麼是socket?什麼是socket的、短連線?java如何簡單實現socket客戶端伺服器

*socket就是套接字,是一種通訊方式!採用這種方式可以實現客戶端和伺服器之間的通訊! 百度百科的解釋:        Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和埠,是一個通訊鏈的控

Mina連線框架實現Android客戶端與伺服器端通訊

一、概述         Apache Mina Server 是一個網路通訊應用框架,也就是說,它主要是對基於TCP/IP、UDP/IP協議棧的通訊框架(當然,也可以提供JAVA 物件的序列化服務、虛擬機器管道通訊服務等),Mina 可以幫助我們快速開發高效能、高擴充套件

基礎知識概念(1):Socket 連線連線的概念

1.短連線 連線->傳輸資料->關閉連線     HTTP是無狀態的,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束後就中斷連線。短連線是指SOCKET建立連線後 ,傳送後或接收完資料後,就馬上斷開連線。 2.長連線

MacWindows遠端伺服器連線檔案互傳(親測可用)

1.工具:Parallels Client,請自行安裝 2.安裝完成介面如下: 2.右鍵點選,新建連線,輸入伺服器IP,點選高階設定按鈕 3.在彈出介面,選在左上角的連線選項,出現如下介面,輸入伺服器使用者名稱密碼,此時可以完成連線,但是無法檔案互傳。  

什麼是連線連線(不看後悔,一看必懂)

在日常專案中,大多的時候我們用的是短連線,一個請求過來,一個執行緒處理完該請求,執行緒被執行緒池回收,這個請求就關閉了.雖然這能滿足很大部分的需求,但是也有些問題,比如說:如果客戶端發的請求比較多,比較頻繁,服務端就會忙於建立連線處理請求,由於服務端的執行緒數也有限,併發比較大的話有可能會造成服

轉:HTTP請求的過程&HTTP/1.0HTTP/1.1的區別&HTTP怎麼處理連線

1.HTTP簡介   web瀏覽器和伺服器之類的互動過程必須遵守的協議.他是tcp/ip中的一個應用協議。用來協議資料交換過程和資料本身的格式.主要的有HTTP/1.0和HTTP1.1.   HTTP/1.0和HTTP/1.1都把TCP作為底層的傳輸協議。   HTTP客戶首先

連線連線區別優缺點

TCP與UDP  udp:面向無連線的通訊協議,資料包括目的埠資訊和源埠資訊 優點:面向無連線,操作簡單,要求系統資源較少,速度快,由於不需要連線,可進行廣播發送 缺點:傳送資料之前不需要與對方建立連線,接收到資料時也不需要傳送確認訊號,傳送端不知道接收端是否正確接接收,不會重