一个不错的国产HTTP服务器:Eurasia 3
2009 4 5 05:14 PM 4544次查看
说是HTTP服务器,似乎不够准确,因为实际上能跑几乎所有的TCP应用,可以当成Apache来用。并且,它也专门提供了Web服务接口,甚至还能很方便地与django、cherrypy整合。
不过真正吸引我的是它提供的HTTP长连接功能,确实很好玩。
在一般的AJAX应用中,客户端浏览器会用JavaScript来访问服务器,获取并更新信息。但是某些应用并非只获取一次信息,而可能是不断访问服务器,以查询是否有更新(如聊天室)。很多的查询访问实际上是无用的,也造成了服务器的负担。
而HTTP长连接则能在客户端与服务器间长时间保持连接,当服务器有更新信息时,由服务器主动输出到客户端,这便杜绝了无用的查询。
如此看来,AJAX像是轮询,而HTTP长连接则是中断,自然后者在效率上更胜一筹。
但HTTP长连接会在很长的时间内一直保持链接,如果使用线程来处理每个长连接的话,并发性会受到极大限制。
而实际上大多数时间里,这些线程并不工作,只是白白占用内存而已。
所以Eurasia 3用到了Stackless,它可以模拟多线程(实际上是将任务放在队列中),并提供了极高的并发性能,于是这个限制也搞定了。
然后就是客户端的问题了。由于HTTP长连接会阻塞客户端,所以客户端会一直处于载入状态。这个问题暂时在Chrome下无解,我也懒得去处理了~
此外还有3个要注意的地方:
1.按ESC键的话,连接便被关闭,这需要用JavaScript处理下(屏蔽ESC键)。
2.文档不会处于ready状态,所以使用jQuery时,不要用$(document).ready这个事件;而window.onload也是不会触发的。
3.浏览器会有个缓存,接收数据不足1KB,且未结束时是不会显示的。这时候可以用JavaScript更改DOM(使用innerHTML或),浏览器便会立即输出数据了。
当然,如果不怕浪费的话,在第一次输出时,多输出一些'\0'字符,让缓存达到1KB即可。
详情可以看这篇讨论。
最后不得不说下,由于文档是中文的,所以学起来很快,不像啃其他框架那样恼火。
有问题也可以去讨论组提出,只是人气不够旺。
希望Eurasia 3可以更好地发展下去~
PS:今天本来想用它写个聊天室的,结果在它与AJAX交互上困扰了,有空再好好研究吧…
0条评论 你不来一发么↓