前段时间,做了一个web im。当时首先考虑基于xmpp协议做,可是时间比较紧,不可能在规定的时间里做好服务器端,而一些基于xmpp协议开发的即时消息服务器都是收费的,所以只好否定了这个方案。后来在网上找了一下,发现了一个开源的东西Pushlet 。它是comet技术的一种实现,利用一个servlet,将服务器端的动态对象主动推送到客户端浏览器。详细内容我就不在这里说了,网上又一篇Think in Pushlet的文章写得非常详细。以下是我的一些心得体会,与大家分享分享:
1、pushlet虽然名字带了一个push,但实际上只实现了poll,需要客户端不断的轮询服务器,如果大量的用户同时在线的话,那么服务器开销会很大,响应时间也会变得很长。网上搜了一下,也没有什么好的解决方案。jetty的Continuation到是提供了一种思路,但这比须把应用部署在jetty上面。
2、用JS写了一个队列用来存放收到的消息,然后用每个发送方作为key,消息队列做为value,存放在自定义的一个hashtable里面。
3、由于时间比较紧,很多js代码都没考虑不同浏览器下是否支持的问题,比如为了不让客户端的拦截工具把消息窗口拦截,用了showModelessDialog来打开窗口,但是这个方法firefox又不支持。因此这后这个web im就只能用在IE 6以上的浏览器下面。