B/S 架构系统基本都使用HTTP 协议通信,一般模式请求响应,因而无法实现像C/S 架构中长连接以及服务器端的消息实时推送。
解决方案:
- 刷新 可以通过手动刷新或者使用JS、头标签实现定时刷新,以此来获取服务器端的最新数据,当然这是最笨的方法,弊端多如牛毛。
- 轮询 也就是使用AJAX 技术,定时对服务器进行少量数据请求,然而请求到的数据未必就是新数据,但是这种方法还是适合对最新消息的实时性要求不高的应用。
-
长轮询 同样是使用AJAX 技术,但是连接会持续,在服务器端接收到请求后,不立即返回数据,只有产生新数据时,再返回此新数据,客户端收到新数据,更新显示并发起下一次请求。
Spring MVC 基于阻塞队列 LinkedBlockingQueue 的同步长轮询功能实现
SpringMVC 异步(长轮询)实现消息定点推送
注:jQuery 中封装的AJAX,尽量使用,因为涉及到浏览器的兼容性问题。
还有百度到两个不常用的,直接复制过来,此文章总结的各类优缺点很不错,站在巨人的肩膀上前进
WebSocket与消息推送
- 长连接 在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。优点:消息即时到达,不发无用请求;管理起来也相对便。 缺点:服务器维护一个长连接会增加开销。 实例:Gmail聊天
- Flash Socket 在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。优点:实现真正的即时通信,而不是伪即时。缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。 实例:网络互动游戏。
为完美解决此问题,减少B/S 架构相对于C/S架构的弊端,在HTML 5 中特意添加了WebSocket 技术,当然也就拥有socket 的众多优点,都懂就不说了。
-
WebSocket
具体的同样参考WebSocket与消息推送 ,或者直接百度WebSocket,说一点,此技术在服务器端只有Java的可以,其他的就不知道了,如果有其他语言的webServer关于消息推送的,敬请分享,共同进步。
参考:长轮询解决方案
网友评论