通過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