写ActionScript程序已经有4年多的时间了,编写Socket的程序还是不多,直到今年使用Flash编写PocketPc的程序才真正用到了Flash内置的XMLSocket客户端,因为AS解析XML是非常慢的,而在PocketPc下面就更慢了,因此虽然使用了XMLSocket,但其实是仅仅跟服务器相互传递字符串.
起初因为Socket服务端程序的限制,socket服务器查询数据库后,仅仅能一条一条的数据返回,这样就导致了当数据库中的数据很多的时候,传递速度成了大问题(在InJoyM300上,100条数据大约需要10s才能传递完成),这样的速度很明显用户是不能接受的,何况100条数据还是非超少的数据,而设计指标是1000条数据,也远大于100条数据.
从上面的情况,我想到了,查询速度慢的主要原因可能是请求次数过多,100条记录需要由socket客户端发出100条请求,而socket服务器又要返回100次的记录,我假想可能是大部分时间耗费在相互的请求上,这就是速度慢的主要瓶颈口,如果能够把socket服务器改做一次请求,全部返回的方式,则能节省大部分的时间,我甚至认为当数据大于100条的时候,能节省10倍以上的时间(因为用flashremoting访问http数据是很快的,同样在ppc下面).
于是在我再三的要求下,socket服务端的设计师将socket修改为客户端一次请求,可以多次返回数据,而返回数据量有客户端控制,得到新的socket服务器后,我立即进行了测试,结果发现,并没有像我想象的一样,同时返回多条数据并没有变快,后来等我跟单条数据一比较,发现一个意想不到的结果,就是多条返回比每次一条返回要慢的多,甚至是每次返回越多,速度越慢.下面是一部分测试数据:
单条返回一条记录:100~120ms 多条返回一条记录:100~120ms
单条返回8条记录:2s左右 多条返回8条记录:5s左右
单条返回100记录:10s左右 多条返回100条记录: >36s
对于上面结果,我查询了Flash的帮助文件,也到网上搜索,都没有找到相关的介绍.
由上面的数据我暂时得出结论,就是Flash的XMLSocket随着传递(接受)的数据量的加大,性能是急剧下降的(至少在PPC上是这样,PC上的flash还没有进行测试,可能也会是这样),Flash的Socket客户端更适合高速低数据量的交互,可能不太时候大数据量的信息交互
当然上面的结论还不一定是正确的,随着对flash的XMLSocket的更进一步的了解,相信会找到真正的原因,得出一个正确的原因,也能够解释上面的现象.