通过websocket,前后台只要建立一次连接,后台就可以不停的向前台推送消息。摆脱了前台一遍遍轮询的烦恼,其乐无穷~~
这里就是一个简单的websocket实现没什么高深的技能,适合初学者。
前台js:
var websocket = null;
$(function(){
var params = "参数";
var ip = '165.152.0.1:8080'; //websocket服务器的地址
var path = "/WS/test/"+params; //项目路径+参数
var uri= location.protocol ==='https:' ? 'wws://' : 'ws://';
var url = uri + ip + path;
if('WebSocket' in window){ //判断浏览器是否支持websocket
websocket = new ReconnectingWebSocket(url);
websocket.debug=true;
}else{
alert('浏览器不支持websocket!');
}
//连接错误的回调方法
websocket.onerror = function() {
console.log('websocket连接出错!');
}
//连接成功的回调方法
websocket.onopen = function() {
console.log('websocket连接成功!');
}
//连接关闭的回调方法
websocket.onclose = function() {
console.log('websocket连接关闭!');
}
//接收到消息的回调方法
websocket.onmessage = function(event){
var data = event.data;
console.log('websocket服务器推送的数据:'+data);
}
//当窗口关闭时,主动去关闭websocket连接
window.onbeforeunload = function() {
websocket.close();
}
});
//发送数据
function send(){
var mes = "要发送的数据";
websocket.send(mes);
}
websocket服务器:新建一个Javaweb项目,
/**
* @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
* {userName}传递参数
*/
@ServerEndpoint("/test/{userName}")
public class WebSocketServer {
static Map<Session, String> map = new HashMap<Session, String>();
@OnOpen
public void OnOpen(@PathParam("userName")String userName,Session session) {
System.out.println(userName);
map.put(session, userName);
System.out.println("OnOpen()方法被执行...");
System.out.println("websocket连接建立成功...");
}
/**
* 连接关闭的方法
*/
@OnClose
public void OnClose(Session session) {
if (map.containsKey(session)) {
map.remove(session);
}
System.out.println("OnClose()方法被执行...");
System.out.println("websocket连接已经关闭...");
}
/**
* 接收消息的方法
* @param msg
* @param session
* @throws InterruptedException
*/
@OnMessage
public void OnMessage(String msg, Session session) throws InterruptedException {
System.out.println("已从客户端接收消息:" + msg);
System.out.println("向客户端发送数据完毕...");
}
/**
* 出错的方法,注意参数不能错
* @param session
* @param error
*/
@OnError
public void OnError(Session session,Throwable error) {
if (map.containsKey(session)) {
map.remove(session);
}
System.out.println("OnError()方法被执行...");
System.out.println("websocket出错...");
}
/**
* 推送数据的方法
* @param session map里存的登录信息
* @param message 推送数据
*/
public void sendMessage(Session session,String message){
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我这里的websocket服务器是jdk1.7 Tomcat7,别的服务器好像是有问题。
websocket需要的jar包:https://download.csdn.net/download/qq_39731741/10721221
无意中发现一篇文章,也是讲websocket的,感觉比我的简洁,你们可以看一下:https://blog.csdn.net/liu857279611/article/details/70157012