今天带来的是webSocket技术。若有不足,敬请指正。。百度百科中这样解释:javascript
如今,不少网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,而后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器须要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费不少的带宽等资源。html
而比较新的技术去作轮询的效果是Comet。这种技术虽然能够双向通讯,但依然须要反复发出请求。并且在Comet中,广泛采用的长连接,也会消耗服务器资源。前端
在这种状况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,而且可以更实时地进行通信。java
项目启动时会自动启动,相似与ContextListener,是WebSocket的核心配置。 其有两个方法:web
注:EndPoint就指的是一个webSocket的一个服务端程序。编程
项目结构 |
---|
![]() |
package com.rrs.config; import java.util.Set; import javax.websocket.Endpoint; import javax.websocket.server.ServerApplicationConfig; import javax.websocket.server.ServerEndpointConfig; /** * @author lzx * */ public class DemoConfig implements ServerApplicationConfig { // 注解式方式编程 @Override public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scan) { System.out.println("webSocket:" + scan.size()); // 服务端扫描到服务返回,能够起到过滤做用 return scan; } // 接口式方式编程 @Override public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> endpointClasses) { // TODO Auto-generated method stub return null; } }
package com.rrs.socket; import java.io.IOException; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; //多例模式 /** * @author lzx * */ @ServerEndpoint("/echo") public class EchoSocket { @OnOpen // 只要访问此路径此方法就会执行 public void open(Session session) { // 一个session 表明一个会话(管道) System.out.println("sessionId:" + session.getId() + "开启..."); } @OnMessage public void getMessage(Session session, String msg) { System.out.println("来自客户端的消息:" + msg); // 服务器发送消息 try { session.getBasicRemote().sendText("服务器发送消息:Hello客户端 "); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 会话关闭的时候调用 @OnClose public void close(Session session) { System.out.println("sessionId:" + session.getId() + "关闭..."); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>webScoket</title> </head> <body> <button onclick=subOpen();>send</button> <br> <input type="text" id="message" /> <button onclick=subSend();>send2</button> <div id="sp"></div> <script type="text/javascript"> var ws;//一个ws对象就是一个通讯管道 var target = "ws://localhost:8080/websocketproject/echo"; function subOpen(){ if ('WebSocket' in window) { ws = new WebSocket(target); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(target); } else { alert('WebSocket is not supported by this browser.'); return; } } function subSend(){ if (ws != null) { var message = document.getElementById('message').value; ws.send(message); document.getElementById('message').value="" // 经过事件 ws.onmessage = function(event){ var sp = document.getElementById("sp"); sp.innerHTML+=event.data; } } else { alert('WebSocket connection not established, please connect.'); } } </script> </body> </html>
console |
---|
![]() |
浏览器,服务器 |
---|
![]() |
![]() |
版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!后端