由于项目需要长连接的方式获取实时的数据,所以就得开始百度研究webSocket怎么玩。
详细介绍看这边。写的真好看:https://www.cnblogs.com/jingmoxukong/p/7755643.html#websocket-%E4%BB%A3%E7%90%86
1、WebSocket 是一种网络通信协议。HTML5
2、为啥需要用到WebSocket
1、HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。(HTTP 协议无法实现服务器主动向客户端发起消息。)
代码如下。
通过扫描的方式
package com.bjsxt.config; import javax.websocket.Endpoint; import javax.websocket.server.ServerApplicationConfig; import javax.websocket.server.ServerEndpointConfig; import java.util.Set; public class WebSocketConfig implements ServerApplicationConfig { /* * 1. getAnnotatedEndpointClasses * 2. getEndpointConfigs * * 上面的两个方法都是用来注册 webSocket的。 只不过注册的方式不同。 1方法是 注解的方式 * 2方法是 接口的方式 * * 显然 注解的方式更加的 灵活简单。 接口的方式更加的传统,严谨。 * * (non-Javadoc) * @see javax.websocket.server.ServerApplicationConfig#getAnnotatedEndpointClasses(java.util.Set) */ @Override public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> arg0) { // TODO Auto-generated method stub System.out.println("正在扫描所有的webSocket服务!!!"); return arg0; } @Override public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> arg0) { // TODO Auto-generated method stub return null; } }
@ServerEndpoint通过这个注解。来访问这个地址
package com.bjsxt.endpoint; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/hello") public class HelloWorld { /** * @OnOpen 这个注解很重要,如果没有写,方法不会走进去的 * @param session */ @OnOpen public void open(Session session ){ System.out.println("建立了一个 webSocket通道!!! sid:"+session.getId()); } }
页面上
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <script type="text/javascript"> function ws_init(){ var target="ws://localhost:8081/hello"; if ('WebSocket' in window) { ws = new WebSocket(target); ===这里去调用HelloWorld 的open方法 } else if ('MozWebSocket' in window) { ws = new MozWebSocket(target); } else { alert('WebSocket is not supported by this browser.'); return; } ws.onopen=function(){ console.info("webSocket通道建立成功!!!"); }; } </script> </head> <body> <button onclick="ws_init();" >建立连接</button> </body> </html>