AppWorker教程-網(wǎng)絡(luò)傳輸

網(wǎng)絡(luò)傳輸(Http)

注意:官方推出了類似ajax的封裝js庫饭豹,如果對(duì)ajax熟悉剩拢,可以直接使用,下載地址
do_Http組件就是實(shí)現(xiàn)http/https協(xié)議的組件.

首先要說明一下,AppWorker平臺(tái)只是一個(gè)移動(dòng)端開發(fā)的平臺(tái),不涉及任何后臺(tái)服務(wù)端的技術(shù),你可以使用你自己任何熟悉的語言和技術(shù)來實(shí)現(xiàn)服務(wù)端脐雪,do_Http組件就是用來和服務(wù)端通信厌小。
http是一個(gè)最基礎(chǔ)的應(yīng)用層的通信協(xié)議,開發(fā)者應(yīng)該很熟悉战秋,但是在QQ群和很多同學(xué)討論璧亚,發(fā)現(xiàn)有不少人沒有很好的理解http。我這里再簡單描述一下脂信,熟悉的人就跳過吧癣蟋。

協(xié)議的介紹

所謂協(xié)議就是指http的客戶端和服務(wù)端的一個(gè)協(xié)商的一個(gè)標(biāo)準(zhǔn),一個(gè)規(guī)范狰闪,是一個(gè)可以用文字來描述能用紙來記錄下來的文檔疯搅。

比如說假設(shè)一個(gè)規(guī)范規(guī)定

 客戶端發(fā)送“hi”給服務(wù)端,服務(wù)端必須回答“hi client"
 客戶端發(fā)送“hello”給服務(wù)端埋泵,服務(wù)端必須回答“hello hello”
 ......

那么不管你客戶端是用Java還是什么語言幔欧,服務(wù)端是用C#還是別的語言,都必須按照這個(gè)規(guī)范丽声,都必須客戶端發(fā)hi礁蔗,服務(wù)端返回hi client

當(dāng)然http協(xié)議要復(fù)雜很多雁社,詳細(xì)的可以參考http協(xié)議的介紹浴井。常用的語言比如Java,C#霉撵,ios等等都有這個(gè)協(xié)議的實(shí)現(xiàn)磺浙,do_Http也一樣洪囤。這些語言實(shí)現(xiàn)的方式各有不同,有不同名字的屬性屠缭,事件箍鼓,方法,但是本質(zhì)上都是實(shí)現(xiàn)這套規(guī)范呵曹。

HTTP通信的過程

  • 客戶端利用一些屬性事件方法款咖,拼接出一個(gè)請(qǐng)求報(bào)文。這個(gè)報(bào)文是有一定格式的奄喂,而且這個(gè)格式必須正確铐殃。報(bào)文通常分報(bào)文header和報(bào)文body。它的大概格式類似如下例子:
POST /sn/index HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost

Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:close

sn=123&n=asa
  • do_Http組件提供了一些屬性和方法來拼接這個(gè)請(qǐng)求報(bào)文:

body :post的數(shù)據(jù)
contentType:post的數(shù)據(jù)格式
method:數(shù)據(jù)請(qǐng)求的方法跨新,基本的是GET富腊,POST,也支持DELETE域帐,PUT等標(biāo)準(zhǔn)
timeout:毫秒為單位的超時(shí)設(shè)置
url:請(qǐng)求的地址
setRequestHeader():設(shè)置header里的屬性和屬性值赘被,可以執(zhí)行多次,每次增加一條

  • 客戶端把報(bào)文發(fā)送到服務(wù)端肖揣,do_Http組件提供了4個(gè)方法來處理民假,本質(zhì)上這4個(gè)方法都是一樣,只不過為了方便龙优,分成了4個(gè)應(yīng)用不同的場(chǎng)景羊异。

request():最基本的請(qǐng)求方法,通常只能發(fā)送文本
download():可以直接發(fā)送一個(gè)請(qǐng)求把服務(wù)端的文件下載下來保存到手機(jī)端彤断,可以監(jiān)控下載的進(jìn)度野舶。
upload():可以把本地的文件上傳到服務(wù)端,可以監(jiān)控上傳的進(jìn)度宰衙。
form():有點(diǎn)類似request和upload的混合平道,它可以同時(shí)發(fā)送多個(gè)文本也能發(fā)送多個(gè)文件。類似 web的表單提交供炼。

  • 服務(wù)端接受到客戶端發(fā)送過來的請(qǐng)求報(bào)文巢掺,然后解析成數(shù)據(jù)。這一塊和do平臺(tái)無關(guān)劲蜻,可以用你自己熟悉的后臺(tái)開發(fā)語言來實(shí)現(xiàn)陆淀。

  • 服務(wù)端對(duì)請(qǐng)求作出相應(yīng)處理之后,返回一個(gè) 響應(yīng)報(bào)文給前端先嬉,這個(gè)報(bào)文也是有格式的轧苫,報(bào)文通常分報(bào)文header和報(bào)文body。類似下面的格式:

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

<html>
<head>
<title>W(wǎng)rox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

這個(gè)步驟也和do平臺(tái)無關(guān)。

  • 客戶端接收服務(wù)端返回的響應(yīng)報(bào)文做相應(yīng)的處理含懊。
    do_Http提供4個(gè)接口來處理返回的數(shù)據(jù)

fail:請(qǐng)求出錯(cuò)事件
progress:發(fā)送和接受數(shù)據(jù)時(shí)可以用這個(gè)監(jiān)控進(jìn)度
result:發(fā)送后接受完數(shù)據(jù)會(huì)觸發(fā)這個(gè)事件
success:只有接受到狀態(tài)碼200才會(huì)觸發(fā)這個(gè)事件身冬,這個(gè)事件不夠完善,還是用result事件更合適

完整的測(cè)試示例

1.客戶端:分別實(shí)現(xiàn)get岔乔,post酥筝,upload,form雏门,download的http請(qǐng)求嘿歌。本質(zhì)上其實(shí)就2種get和post。do_http還支持put,delete等茁影,這里沒有演示宙帝。

為了看到請(qǐng)求的報(bào)文,服務(wù)端會(huì)把請(qǐng)求的報(bào)文作為響應(yīng)的報(bào)文數(shù)據(jù)一部分返回到客戶端募闲。需要輸入你自己搭建的服務(wù)端的IP地址和端口步脓。


image

2. 服務(wù)端利用java的servlet來模擬一個(gè)服務(wù)端,使用的jetty容器浩螺,可以不用安裝tomcat服務(wù)靴患,直接當(dāng)成一個(gè)應(yīng)用可以運(yùn)行。就是作為大家做服務(wù)端的參考和調(diào)試用要出。源代碼在GIT鸳君。服務(wù)端啟動(dòng)一個(gè)8080端口的web服務(wù)。

詳細(xì)的示例參考這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厨幻,一起剝皮案震驚了整個(gè)濱河市相嵌,隨后出現(xiàn)的幾起案子腿时,更是在濱河造成了極大的恐慌况脆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件批糟,死亡現(xiàn)場(chǎng)離奇詭異格了,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)徽鼎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門盛末,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人否淤,你說我怎么就攤上這事悄但。” “怎么了石抡?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵檐嚣,是天一觀的道長。 經(jīng)常有香客問我啰扛,道長嚎京,這世上最難降的妖魔是什么嗡贺? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮鞍帝,結(jié)果婚禮上诫睬,老公的妹妹穿的比我還像新娘。我一直安慰自己帕涌,他們只是感情好摄凡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宵膨,像睡著了一般架谎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辟躏,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天谷扣,我揣著相機(jī)與錄音,去河邊找鬼捎琐。 笑死会涎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瑞凑。 我是一名探鬼主播末秃,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼籽御!你這毒婦竟也來了练慕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤技掏,失蹤者是張志新(化名)和其女友劉穎铃将,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哑梳,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劲阎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸠真。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悯仙。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吠卷,靈堂內(nèi)的尸體忽然破棺而出锡垄,到底是詐尸還是另有隱情,我是刑警寧澤祭隔,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布货岭,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茴她。R本人自食惡果不足惜寻拂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丈牢。 院中可真熱鬧祭钉,春花似錦、人聲如沸己沛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽申尼。三九已至垮卓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間师幕,已是汗流浹背粟按。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霹粥,地道東北人灭将。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像后控,于是被迫代替她去往敵國和親庙曙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359