技术疑问回答

你需要用Ajax技术,你可以在网上查相关资料

我明白你的意思,你需要服务器端发出通知,而不是用客户端提出请求。

我告诉你以前我是怎么做的吧,你到网上查一个jetty的jsp平台,我以前用的是jetty6.0 ,现在应该有更高版本了,jetty6.0提供了一个叫做continuous connection的东西,这是什么呢,简单解释一下,就是一种对服务器端收到http请求,但是不马上返回结果,一直挂起,知道服务器发生变化,觉得应该通知客户端的时候,对客户端返回请求。

换句话说,只要你的客户端一开始向你服务器端请求数据,服务器端挂起请求,在有需要时再返回客户端,客户端使用Ajax异步处理,在回调函数里写上相关处理,服务器端没有返回时回调函数不会被触发。这样就能做到即时的消息通知,而且并不像客户端不断refresh一样占用无效的流量。

jetty6.0里面提供了一个chat的sample,这个技术就是为聊天室设计的。

关于连接数的问题,其实65534是一个错误的数字,首先,如果你用的是windows平台的服务器,很遗憾,上限2048,因为以前我也做过相关东西,所以也找过破解,没有办法改变这个连接数。

然后,如果你愿意用其他平台,那么可以告诉你Solaris10的连接数达到十万,我有个朋友就是使用jetty6.0和solaris10的组合做的聊天室,通讯效果不错的。

客户端执行简单的js脚本,就是IE,firefox这样的浏览器。
如果客户端发出请求后,服务器马上回复,还有后面的事情么?

资料你上他们官方网站看好了,这只是Ajax技术应用的一个极端而已。

我这里假设你了解Ajax技术吧,不了解可以上网查。

客户端里的js代码使用Ajax通过XmlHttpRequest请求服务器端,服务器端不返回,形成长连接,等服务器端有数据更新,服务器返回,Ajax异步处理,这样子通信就是即时的。

jetty官方网站:
http://www.mortbay.org/
你到上面下一个jetty下来,里面有chat这个sample的。

solaris10支持10万连接数,这个我就不解释了,你到sun公司里面看他的产品介绍就知道了,可以免费下载的。

我这里也没什么资料,开发文档涉及商业机密,不可能给你的。只是给你一个提示而已,另外也纠正你一个误区,就是连接数的问题,你服务器端为什么要对每一个请求新开一个端口呢?难道就不能所有连接共用一个端口?(比如80端口)

我现在又不知道你基础怎样,所以也只能说到这里吧。我觉得你只是需要一种即时通信的思路了,什么服务器作为后台不重要。如果你技术过关,自己写一个web服务器处理这种并发请求也是可以的,不一定要用jetty(使用jetty需要JAVA基础)

另外,这个思路最关键的地方就是要挂起客户端的请求,延时返回。

只要你不使用activeX,或者java applet的方式,只是轻量级的http瘦客户端,你就必须明白,你必须遵循request-respond的机制,这个是不可能改变的,不管你是xmlhttprequest还是不断refresh,你只能在这个机制上加以修改,让他达到服务器通知的效果。

延时返回的方法有很多,大部分http服务器都可以提供,比如php里面可以sleep,我之所以使用jetty是因为它是很底层的,可以很底层的管理每一个请求的线程,而且专门设计过一个挂起请求的解决方案和专用的类,这样的好处就是挂起客户端请求的开销可以降到最小,用php或者.net开销都过大了,因为他们没有为此专门设计过。

太感谢了,我确实没这方面的基础,现在先看看可行性,以后开发里,还得多多请教。5天后给你加分哈
另外,如你所说,jetty是性能最好的,但我想问下,如果我想做到商用的产品里去的话,用jetty合适吗?
或者用什么方案最适合?
jetty的部署你可以在他的官方网站上看看,可以很好的部署,甚至可以加到对方系统服务里面。

另外,我的方案只是在轻量级瘦客户端开发上提出的,这个前提是你提供服务器,对方只提供客户端。你想做成商品,你的客户想要看到的展示很可能是眩目的效果,js不是不能写很漂亮的效果,可是js的表现力再强也强不过flash,哪怕你用过所有的css滤镜。

而flash里面有socket编程,带flash的页面属于富客户端,它有天然的socket长连接,不需要你改装http的request-response机制。你只需要再写一个socket服务器段来监听请求,建立连接,就能向客户端发出通知了

posted @ 2008-06-20 20:54  winnerlan  阅读(283)  评论(0编辑  收藏  举报