WebSocket實現(xiàn)數(shù)據(jù)庫更新時前端頁面刷新
更新時間:2019年04月07日 16:21:48 作者:落日流年
這篇文章主要為大家詳細介紹了WebSocket實現(xiàn)數(shù)據(jù)庫更新時前端頁面刷新,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了WebSocket實現(xiàn)數(shù)據(jù)庫更新時前端頁面刷新,供大家參考,具體內容如下
后臺代碼:
WebSocketConfig:
package com.x.common.websocket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
WebSocketServlet:
package com.x.common.websocket;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket/{userId}")
@Component
public class WebSocketServlet {
private static int onlineCount = 0;
private static Map<String, WebSocketServlet> clients = new ConcurrentHashMap<>();
private Session session;
private String userId;
@OnOpen
public void onOpen(@PathParam("userId") String userId, Session session) throws IOException {
this.userId = userId;
this.session = session;
addOnlineCount();
clients.put(userId, this);
System.out.println("已連接");
}
@OnClose
public void onClose() throws IOException {
clients.remove(userId);
subOnlineCount();
}
@OnMessage
public void onMessage(String message) throws IOException {
JSONObject jsonTo = JSONObject.parseObject(message);
if (!jsonTo.get("To").equals("All")){
sendMessageTo("給一個人", jsonTo.get("To").toString());
}else{
sendMessageAll("給所有人");
}
}
@OnError
public void onError(Session session, Throwable error) {
error.printStackTrace();
}
public void sendMessageTo(String message, String To) throws IOException {
// session.getBasicRemote().sendText(message);
//session.getAsyncRemote().sendText(message);
for (WebSocketServlet item : clients.values()) {
if (item.userId.equals(To) ){
item.session.getAsyncRemote().sendText(message);
}
}
}
public void sendMessageAll(String message) throws IOException {
for (WebSocketServlet item : clients.values()) {
item.session.getAsyncRemote().sendText(message);
}
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketServlet.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketServlet.onlineCount--;
}
public static synchronized Map<String, WebSocketServlet> getClients() {
return clients;
}
}
JS代碼:
var websocket = null;
//判斷當前瀏覽器是否支持WebSocket
if ('WebSocket' in window) {
websocket = new WebSocket("ws://localhost:8086/websocket/1");
} else {
alert('當前瀏覽器 Not support websocket')
}
//連接發(fā)生錯誤的回調方法
websocket.onerror = function() {
console.log("WebSocket連接發(fā)生錯誤");
};
//連接成功建立的回調方法
websocket.onopen = function() {
console.log("WebSocket連接成功");
}
//接收到消息的回調方法
websocket.onmessage = function(event) {
//返回數(shù)據(jù)轉JSON
var json=JSON.parse(event.data);
//result為bootstrap table 返回數(shù)據(jù)
var rows=result.rows;
for(var i=0;i<rows.length;i++){
var row=rows[i];
if(row.id==json.id){
//判斷列Id相同時刷新表格
//$('#dataGrid').bootstrapTable('updateByUniqueId', {index: i, row: row});'refresh'
$('#dataGrid').bootstrapTable('refresh');
}
}
console.log(event.data);
}
//連接關閉的回調方法
websocket.onclose = function() {
console.log("WebSocket連接關閉");
}
//監(jiān)聽窗口關閉事件,當窗口關閉時,主動去關閉websocket連接,防止連接還沒斷開就關閉窗口,server端會拋異常。
window.onbeforeunload = function() {
closeWebSocket();
}
//關閉WebSocket連接
function closeWebSocket() {
websocket.close();
}
返回前臺是調用方法:
@Autowired
private WebSocketServlet scoket;
//學生信息
XStudentInfoEntity student = xStudentInfoService.getObjectById(id.replace("\"",""));
//提醒學生數(shù)據(jù)發(fā)生改變
scoket.sendMessageAll(JSONObject.toJSONString(student));
pom.xml:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> </dependency>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
ProtoStuff不支持BigDecimal序列化及反序列化詳解
這篇文章主要為大家介紹了ProtoStuff不支持BigDecimal序列化/反序列化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
SpringSecurity動態(tài)加載用戶角色權限實現(xiàn)登錄及鑒權功能
這篇文章主要介紹了SpringSecurity動態(tài)加載用戶角色權限實現(xiàn)登錄及鑒權功能,很多朋友感覺這個功能很難,今天小編通過實例代碼給大家講解,需要的朋友可以參考下2019-11-11
SpringCloud gateway如何修改返回數(shù)據(jù)
這篇文章主要介紹了SpringCloud gateway如何修改返回數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

