B/S协同处理的简单实现(reversed Ajax的comet方式Java山寨版)

最近写个网页版的游戏,遇到了一个问题就是如果有一个人出牌,怎么让其他玩家立刻看到这个玩家所出的牌。

搜索半天无果,不过倒是发现了这类问题都可以归结为一个问题就是B/S架构程序的协同处理问题。

也发了个贴http://topic.csdn.net/u/20091028/20/e3be739d-6551-4d3f-acb7-305ac995ded1.html,寻求好的解决办法。

最后决定用Ajax的comet方式。但是鉴于对服务器有要求,感觉浏览器也不一定全部支持,所以最后决定自己实现。

实现的类视图如下

举例,比如用户进入房间,首先通过EnterBoardAction进入房间,并列出所有在房间内的人。之后通过JavaScript向服务器提出UpdateInfoAction请求,并向Subject注册,该请求通过wait方法,将请求挂起。

当有用户在进入房间时,调用Subject的notifyAllObserver方法,然后所有在房间内的其他用户可以即时更新新进来的用户的信息。

下面展示代码(由于篇幅有限,紧展示部分代码):

查看Board的jsp的JavaScript:

 

查看Board的jsp中的JavaScript

 

AjaxRequest.js:

AjaxRequest的部分代码

服务器端代码简单,在上方类视图中有显示,固不在此列出。

 

这里也只是提供一个思路,服务器端实现其实可以使多样的,对任何语言理论上都起作用。另外,这种实现方式是我想出的对服务器不论是带宽还是资源压力最小的,调用wait函数,而没有用死循环也是出于这个原因。

在此也希望如果大家有什么更好的方式解决类似问题,请回复一起讨论

 

posted on 2009-11-03 21:36  FTDED  阅读(2286)  评论(3编辑  收藏  举报

导航