浏览 3523 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-22
这种情况下,如果服务器有什么消息要“即时”(!=“及时”)通知到客户端时 一样可以使用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代码编写开始 这对服务器、客户端开发人员来说都是复杂的事情,费时费神的事情 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |