AppWorker教程-網絡傳輸

網絡傳輸(Http)

注意:官方推出了類似ajax的封裝js庫,如果對ajax熟悉,可以直接使用,下載地址
do_Http組件就是實現http/https協議的組件.

首先要說明一下,AppWorker平臺只是一個移動端開發的平臺,不涉及任何后臺服務端的技術,你可以使用你自己任何熟悉的語言和技術來實現服務端,do_Http組件就是用來和服務端通信。
http是一個最基礎的應用層的通信協議,開發者應該很熟悉,但是在QQ群和很多同學討論,發現有不少人沒有很好的理解http。我這里再簡單描述一下,熟悉的人就跳過吧。

協議的介紹

所謂協議就是指http的客戶端和服務端的一個協商的一個標準,一個規范,是一個可以用文字來描述能用紙來記錄下來的文檔。

比如說假設一個規范規定

 客戶端發送“hi”給服務端,服務端必須回答“hi client"
 客戶端發送“hello”給服務端,服務端必須回答“hello hello”
 ......

那么不管你客戶端是用Java還是什么語言,服務端是用C#還是別的語言,都必須按照這個規范,都必須客戶端發hi,服務端返回hi client

當然http協議要復雜很多,詳細的可以參考http協議的介紹。常用的語言比如Java,C#,ios等等都有這個協議的實現,do_Http也一樣。這些語言實現的方式各有不同,有不同名字的屬性,事件,方法,但是本質上都是實現這套規范。

HTTP通信的過程

  • 客戶端利用一些屬性事件方法,拼接出一個請求報文。這個報文是有一定格式的,而且這個格式必須正確。報文通常分報文header和報文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組件提供了一些屬性和方法來拼接這個請求報文:

body :post的數據
contentType:post的數據格式
method:數據請求的方法,基本的是GET,POST,也支持DELETE,PUT等標準
timeout:毫秒為單位的超時設置
url:請求的地址
setRequestHeader():設置header里的屬性和屬性值,可以執行多次,每次增加一條

  • 客戶端把報文發送到服務端,do_Http組件提供了4個方法來處理,本質上這4個方法都是一樣,只不過為了方便,分成了4個應用不同的場景。

request():最基本的請求方法,通常只能發送文本
download():可以直接發送一個請求把服務端的文件下載下來保存到手機端,可以監控下載的進度。
upload():可以把本地的文件上傳到服務端,可以監控上傳的進度。
form():有點類似request和upload的混合,它可以同時發送多個文本也能發送多個文件。類似 web的表單提交。

  • 服務端接受到客戶端發送過來的請求報文,然后解析成數據。這一塊和do平臺無關,可以用你自己熟悉的后臺開發語言來實現。

  • 服務端對請求作出相應處理之后,返回一個 響應報文給前端,這個報文也是有格式的,報文通常分報文header和報文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>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

這個步驟也和do平臺無關。

  • 客戶端接收服務端返回的響應報文做相應的處理。
    do_Http提供4個接口來處理返回的數據

fail:請求出錯事件
progress:發送和接受數據時可以用這個監控進度
result:發送后接受完數據會觸發這個事件
success:只有接受到狀態碼200才會觸發這個事件,這個事件不夠完善,還是用result事件更合適

完整的測試示例

1.客戶端:分別實現get,post,upload,form,download的http請求。本質上其實就2種get和post。do_http還支持put,delete等,這里沒有演示。

為了看到請求的報文,服務端會把請求的報文作為響應的報文數據一部分返回到客戶端。需要輸入你自己搭建的服務端的IP地址和端口。


image

2. 服務端利用java的servlet來模擬一個服務端,使用的jetty容器,可以不用安裝tomcat服務,直接當成一個應用可以運行。就是作為大家做服務端的參考和調試用。源代碼在GIT。服務端啟動一個8080端口的web服務。

詳細的示例參考這里

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。