高分求教:服务器如何通知客户端发送更新请求?(在线等)

qkyong 2007-12-07 10:43:48
客户端发送初始HTTP请求,服务器给其响应客户的帐户信息,信息通过XML格式返回,客户端显示出来。
服务器端检测到客户帐户发生变化后,需要通知客户端发起更新请求,请问服务器如何实现这种功能?
...全文
668 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
joycheney 2007-12-11
  • 打赏
  • 举报
回复
jetty的部署你可以在他的官方网站上看看,可以很好的部署,甚至可以加到对方系统服务里面。

另外,我的方案只是在轻量级瘦客户端开发上提出的,这个前提是你提供服务器,对方只提供客户端。你想做成商品,你的客户想要看到的展示很可能是眩目的效果,js不是不能写很漂亮的效果,可是js的表现力再强也强不过flash,哪怕你用过所有的css滤镜。

而flash里面有socket编程,带flash的页面属于富客户端,它有天然的socket长连接,不需要你改装http的request-response机制。你只需要再写一个socket服务器段来监听请求,建立连接,就能向客户端发出通知了
qkyong 2007-12-10
  • 打赏
  • 举报
回复
太感谢了,我确实没这方面的基础,现在先看看可行性,以后开发里,还得多多请教。5天后给你加分哈
另外,如你所说,jetty是性能最好的,但我想问下,如果我想做到商用的产品里去的话,用jetty合适吗?
或者用什么方案最适合?
joycheney 2007-12-09
  • 打赏
  • 举报
回复
另外,这个思路最关键的地方就是要挂起客户端的请求,延时返回。

只要你不使用activeX,或者java applet的方式,只是轻量级的http瘦客户端,你就必须明白,你必须遵循request-respond的机制,这个是不可能改变的,不管你是xmlhttprequest还是不断refresh,你只能在这个机制上加以修改,让他达到服务器通知的效果。

延时返回的方法有很多,大部分http服务器都可以提供,比如php里面可以sleep,我之所以使用jetty是因为它是很底层的,可以很底层的管理每一个请求的线程,而且专门设计过一个挂起请求的解决方案和专用的类,这样的好处就是挂起客户端请求的开销可以降到最小,用php或者.net开销都过大了,因为他们没有为此专门设计过。
joycheney 2007-12-09
  • 打赏
  • 举报
回复
客户端执行简单的js脚本,就是IE,firefox这样的浏览器。
如果客户端发出请求后,服务器马上回复,还有后面的事情么?

资料你上他们官方网站看好了,这只是Ajax技术应用的一个极端而已。

我这里假设你了解Ajax技术吧,不了解可以上网查。

客户端里的js代码使用Ajax通过XmlHttpRequest请求服务器端,服务器端不返回,形成长连接,等服务器端有数据更新,服务器返回,Ajax异步处理,这样子通信就是即时的。

jetty官方网站:
http://www.mortbay.org/
你到上面下一个jetty下来,里面有chat这个sample的。

solaris10支持10万连接数,这个我就不解释了,你到sun公司里面看他的产品介绍就知道了,可以免费下载的。

我这里也没什么资料,开发文档涉及商业机密,不可能给你的。只是给你一个提示而已,另外也纠正你一个误区,就是连接数的问题,你服务器端为什么要对每一个请求新开一个端口呢?难道就不能所有连接共用一个端口?(比如80端口)

我现在又不知道你基础怎样,所以也只能说到这里吧。我觉得你只是需要一种即时通信的思路了,什么服务器作为后台不重要。如果你技术过关,自己写一个web服务器处理这种并发请求也是可以的,不一定要用jetty(使用jetty需要JAVA基础)
qkyong 2007-12-09
  • 打赏
  • 举报
回复
谢谢joycheney,但我有二个疑问:
1 这个方法对客户端要求是否过高,我现在想把客户端看成一个普通的浏览器,只是增加能识别服务器的
通知的功能?
2 客户端发请求,服务器一定要立即回复的,你这里却要把客户端的请求挂起?
请再帮忙解答下,如果有相关资料,能不能发给我qkyong@yahoo.com.cn,先谢了!
joycheney 2007-12-09
  • 打赏
  • 举报
回复
你需要用Ajax技术,你可以在网上查相关资料

我明白你的意思,你需要服务器端发出通知,而不是用客户端提出请求。

我告诉你以前我是怎么做的吧,你到网上查一个jetty的jsp平台,我以前用的是jetty6.0 ,现在应该有更高版本了,jetty6.0提供了一个叫做continuous connection的东西,这是什么呢,简单解释一下,就是一种对服务器端收到http请求,但是不马上返回结果,一直挂起,知道服务器发生变化,觉得应该通知客户端的时候,对客户端返回请求。

换句话说,只要你的客户端一开始向你服务器端请求数据,服务器端挂起请求,在有需要时再返回客户端,客户端使用Ajax异步处理,在回调函数里写上相关处理,服务器端没有返回时回调函数不会被触发。这样就能做到即时的消息通知,而且并不像客户端不断refresh一样占用无效的流量。

jetty6.0里面提供了一个chat的sample,这个技术就是为聊天室设计的。

关于连接数的问题,其实65534是一个错误的数字,首先,如果你用的是windows平台的服务器,很遗憾,上限2048,因为以前我也做过相关东西,所以也找过破解,没有办法改变这个连接数。

然后,如果你愿意用其他平台,那么可以告诉你Solaris10的连接数达到十万,我有个朋友就是使用jetty6.0和solaris10的组合做的聊天室,通讯效果不错的。
gems76 2007-12-08
  • 打赏
  • 举报
回复
comet
qkyong 2007-12-08
  • 打赏
  • 举报
回复
但只有服务器端能检测帐户变化,类似于QQ的短消息通知机制,如果服务器和客户端建SOCKET,服务器可以
建多少个呀?不会是每个客户端都要占用一个TCP或者UDP端口吧(毕竟最多只有65534个哈),请高手继续指教!
擒兽 2007-12-08
  • 打赏
  • 举报
回复
向客户端通信,服务器压力大。毕竟用户是主动的,用户在进行操作肯定要再向服务器提交请求,在提交的时候验证也行,或者AJAX后台持续验证。
purexu 2007-12-08
  • 打赏
  • 举报
回复
你可以反过来~在客户端获取到信息后发送帐户信息去服务器端~服务器端检测到客户帐户发生变化后再通知客户端发起更新请求~
qkyong 2007-12-07
  • 打赏
  • 举报
回复
自己顶下,
这里强调下,服务器需要通知特定的客户端进行更新,而不是对所有客户端进行更新,客户端更新只是获取XML,由客户端自己去生成页面。
论坛里有人说,服务器和每个客户端建一个SOCKET连接,这样是否太浪费,且服务器也没这么多端口来支持大量用户呀?
请高人指点下,谢谢!

61,112

社区成员

发帖
与我相关
我的任务
社区描述
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
社区管理员
  • HTML(CSS)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧