简单说一下,使用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代码编写开始
这对服务器、客户端开发人员来说都是复杂的事情,费时费神的事情
分享到:
相关推荐
Golongpoll 是 golang HTTP 的 longpolling 库,可以使构建 web pub-sub 更加容易。基本用法:import "github.com/jcuga/golongpoll" // This launches a goroutine and creates channels for all the ...
这是一个实作Long polling 机制的web 程式没有多余不相干的功能,纯粹的comet programming 基本范例 Long polling的介绍可参考这篇 程式介绍 index.php 为主程式进入点 allmsg.php 为第一次程式进入,抓取所有讯息 ...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用