论坛首页 Java企业应用论坛

Long Polling + Hessian (Comet)

浏览 3526 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-22  
简单说一下,使用Swing/RCP或其他胖客户端 ---HTTP--->Java Web服务器的
这种情况下,如果服务器有什么消息要“即时”(!=“及时”)通知到客户端时
一样可以使用Long Polling技术,大概的做法如下:

客户端和服务器使用Hessian技术来做,同时客户端使用能够支持Cookie的功能(JDK6+下加1行代码即可)

1>服务端要实现一个事件池,这个事件池能够区分不同用户的事件,服务端一有即时信息要通知客户端,就new一个Event,放入事件池中(事件池能够根据用户id自动为事件排队),并使用notifyAll进行通知action的poll方法

2>客户端使用Hessian调用action一个poll(long timeout)方法,一旦有该用户的事件,poll中的wait方法会被事件池唤醒,poll方法能够从事件池中获得要通知给本用户的那个事件,然后返回,这样就能做到即时告知客户端;如果timeout时间内没有事件,则直接返回null给客户端。
返回给客户端的是一个Event对象,非空情况,里面包含了具体的消息对象(任意Object,只要implements java.io.Serializable);

3>客户端接收到该Event后,能够判断如何处理,然后继续再调用poll(timeout)方法;如果返回的Event为null,那二话不说,也继续调用poll(timeout)

.....
这是我们正在使用的一个设计的基本思想,我们使用时,代码是做了一些必要的封装以便于集中精神做业务开发。

====================
不要自己再开发一个什么TCPServer,一个字母一个字母从Socket代码编写开始
这对服务器、客户端开发人员来说都是复杂的事情,费时费神的事情
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics