|
楼主 |
发表于 2009-11-9 10:07
|
显示全部楼层
为什么会卡,科普&一些解释
对技术不感兴趣的,直接看最后三行就可以了。
( d7 l3 Q2 W X; V0 l- o
! l5 ]. _2 y: [5 L1 L6 U1 O$ Q
7 X0 U! H9 F4 J( p$ I8 ~7 a$ @6 j目前所做的飞信基于HTTP协议,通过172网关,连到移动的飞信服务器。/ l+ M6 K6 R6 y( X
HTTP协议基于TCP,每次连接(CONNECT)需要来往几次握手(好像是三次),
# m& R* @ Q5 K/ M这个过程比较费时,据我估计在网络正常时也需要1秒左右,网络不好时就不好说了。6 A1 N6 g* X9 g1 _3 [6 d
如果在前台连接,其间一定会将界面卡住。' O8 E( _+ ^2 m) I* |3 X5 w- i* i
如果是多线程系统,简单地开个后台进程就可以绕过这个限制。/ \+ Q- G& U- K$ u9 t7 \9 L# h
PalmOS虽然可能通过一些技术伪装得象可以同时好几个程序一起运行的样子,
$ r' I: m4 I0 h4 w6 p" ]但本质上还是个单线程系统,不存在可以自由操控的后台进程,/ i" Q. F7 [1 x- f1 P: |4 b' G
所以在连接时,不管你正在干什么,一定卡住,直到连接上或超时。
: M+ y" M8 t4 b) L那么,想办法一直保持连接可不可以呢?
5 l) Z; `2 x0 n& MHTTP协议是无状态协议,1.0时,每次请求结束后服务器都会主动关闭连接,下次请求再重连,
, ~, O1 R$ B$ d! w+ B, i之前卡在登录界面的朋友,所在地区的移动网关就是这种情况,
& r! A9 U* l- P. n5 }) Z0 a所以这部分朋友,即使可以登录了,使用过程中也会非常卡,应该基本没有可用性。, }7 k1 z# P8 g
其他地区朋友的网关比较好一些,使用了HTTP 1.1中的持续连接,( h' p5 z8 o( \8 |
也就是请求完不马上关闭连接,但不马上关闭,不代表永远不关闭。* j+ Q" w# g+ x- c; I$ Y$ s9 G
比如,作者所在地区网关会在50次请求后主动关闭连接,若15秒内没有请求也同样会主动关闭连接。% d7 k2 o5 W' s; i5 G' C
关闭后,所有请求必须再连接才可以,此时也会卡一下。
2 M5 Q; ^/ T- P1 A/ T; u3 B那么,是不是减少请求频率可以相应减少重连几率呢?: ~. W; Z( V/ Q$ S
这也不可能,一方面,长时间的无请求,服务器端会主动关闭连接。( o3 g1 P8 f$ f' S a3 [
另一方面,若没有请求,飞信的状态没办法即时更新,好友上线、来消息等就没办法获取了。. g/ j6 I: u: F% [ o
综上,HTTP协议确实不适合承载IM消息,0 f% M) u/ E2 ?) L8 ]
因此基于HTTP协议的飞信比较垃圾,( {/ e% A0 M. M. ~. e* S6 p+ c
加上单线程的PalmOs,造成了一些本来可以绕过的缺陷很难弥补。+ b0 C' S2 o$ q6 Q* H6 l: A5 b
是在此HTTP协议上继续做,还是转到SIP协议上去,是个问题。
+ \) X: A" E( \0 ^: ^4 | T0 }- L/ t. a
" N+ H0 q! `5 p- ` z% c) I
" h, a! n1 P" [/ z+ L
总之,虽然目前的程序有这样那样的缺陷,, H/ r+ w2 |7 U& T; o
但相信对大多数朋友来说,还是比JAVA的那个要方便一点点的,9 p1 }5 T) S4 L7 g7 f }/ r( [
对于觉得实在卡得没法用的朋友,那就不用呗,毕竟你也没损失什么,还是原来那个样子而已。 |
评分
-
查看全部评分
|