做Symbian的网络开发将近一年,在程序网络模块的开发上还是有一些心得的。和大家分享一下。
如何设计一个可靠的,并且能够良好移植的网络引擎,简单的说有三点:
1.有一个底层http模块(Net),该模块负责具体的接入点选择,网络报文的组装,收发,超时控制,差错处理。
2.在Net模块之上,有一个引擎模块(Engine),负责控制程序的流程,业务的走向。
3.Net模块和Engine模块有低耦合的回调通信机制,即net模块可以将收到的数据顺利的提交给Engine进行处理,但不依赖于Engine.
手机操作系统肯定会提供http的库,不要告诉我你一直用的socket做网络,http库相对最基本的socket主要提供了一个报文解析,你不需要手动去解析http header&body里面的各项参数和内容,一般会有框架给的一个专门的回调函数把这些值传给我们,以symbian为例
MHFRunL就是系统框架在收到报文的时候回调给Http模块的回调函数,光看名字就能知道每个case处理的是什么内容了吧?
收的问题系统API已经替我们做了,我们只需要对每一次事务做出处理就行了,那发的问题怎么解决呢?http库不会让你一个字一个字去拼http的header和内容的,调用相应的api即可,对Http头和内容的组织形式,相关参数的意义请自行去官网查阅。
累了,先写到这儿,明天继续~~
如何设计一个可靠的,并且能够良好移植的网络引擎,简单的说有三点:
1.有一个底层http模块(Net),该模块负责具体的接入点选择,网络报文的组装,收发,超时控制,差错处理。
2.在Net模块之上,有一个引擎模块(Engine),负责控制程序的流程,业务的走向。
3.Net模块和Engine模块有低耦合的回调通信机制,即net模块可以将收到的数据顺利的提交给Engine进行处理,但不依赖于Engine.
手机操作系统肯定会提供http的库,不要告诉我你一直用的socket做网络,http库相对最基本的socket主要提供了一个报文解析,你不需要手动去解析http header&body里面的各项参数和内容,一般会有框架给的一个专门的回调函数把这些值传给我们,以symbian为例
void CMyHttpModule::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
{
switch (aEvent.iStatus)
{
case THTTPEvent::EGotResponseHeaders:
{
RHTTPResponse resp = aTransaction.Response();
TInt status = resp.StatusCode();
if (status != 200)
{
aTransaction.Close();
return;
}
}
break;
case THTTPEvent::EGotResponseBodyData:
break;
case THTTPEvent::EResponseComplete:
break;
case THTTPEvent::ESucceeded:
break;
case THTTPEvent::EFailed:
break;
default:
break;
}
}
MHFRunL就是系统框架在收到报文的时候回调给Http模块的回调函数,光看名字就能知道每个case处理的是什么内容了吧?
收的问题系统API已经替我们做了,我们只需要对每一次事务做出处理就行了,那发的问题怎么解决呢?http库不会让你一个字一个字去拼http的header和内容的,调用相应的api即可,对Http头和内容的组织形式,相关参数的意义请自行去官网查阅。
累了,先写到这儿,明天继续~~