Websocket은 자바 백그라운드에서 메시지를 프론트 데스크톱으로 주동적으로 전송합니다
수요: 프로젝트 테스트, 사용자 로그인 실패가 부족하면 관리자에게 메시지를 전달합니다. 이 방식을 생각하면 사용자 로그인이 실패할 때 관리자 사용자는 페이지에서 꽝꽝 난탄하는alert를 볼 수 있습니다.
본문
pom.xml
<dependency>
<groupId>javax.websocketgroupId>
<artifactId>javax.websocket-apiartifactId>
<version>1.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javaxgroupId>
<artifactId>javaee-apiartifactId>
<version>7.0version>
<scope>providedscope>
dependency>
Websocket.java
package com.jeecg.webSocket;
import net.sf.json.JSONObject;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ServerEndpoint("/webSocket/{username}")
public class WebSocket {
private static int onlineCount = 0;
private static Map clients = new ConcurrentHashMap();
private Session session;
private String username;
@OnOpen
public void onOpen(@PathParam("username") String username, Session session) throws IOException {
this.username = username;
this.session = session;
addOnlineCount();
clients.put(username, this);
System.out.println(" ");
}
@OnClose
public void onClose() throws IOException {
clients.remove(username);
subOnlineCount();
}
@OnMessage
public void onMessage(String message) throws IOException {
JSONObject jsonTo = JSONObject.fromObject(message);
String mes = (String) jsonTo.get("message");
if (!jsonTo.get("To").equals("All")){
sendMessageTo(mes, 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 {
for (WebSocket item : clients.values()) {
if (item.username.equals(To) )
item.session.getAsyncRemote().sendText(message);
}
}
public void sendMessageAll(String message) throws IOException {
for (WebSocket item : clients.values()) {
item.session.getAsyncRemote().sendText(message);
}
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocket.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocket.onlineCount--;
}
public static synchronized Map getClients() {
return clients;
}
}
fineui_home.jsp
<span style="color:#0000ff;">var</span> websocket = <span style="color:#0000ff;">null</span><span style="color:#000000;">;
</span><span style="color:#0000ff;">var</span> host =<span style="color:#000000;"> document.location.host;
</span><span style="color:#008000;">//</span><span style="color:#008000;"> userName</span>
<span style="color:#0000ff;">var</span> username = '${loginUserName}'<span style="color:#000000;">;
</span><span style="color:#008000;">//</span><span style="color:#008000;"> </span>
<span style="color:#0000ff;">var</span> webName = '${webName}'<span style="color:#000000;">;
</span><span style="color:#008000;">//</span><span style="color:#008000;"> WebSocket</span>
<span style="color:#0000ff;">if</span> ('WebSocket' <span style="color:#0000ff;">in</span><span style="color:#000000;"> window) {
</span><span style="color:#008000;">//</span><span style="color:#008000;"> Websocket</span>
websocket = <span style="color:#0000ff;">new</span> WebSocket('ws://' + host + '/' + webName + '/webSocket/' +<span style="color:#000000;"> username);
} </span><span style="color:#0000ff;">else</span><span style="color:#000000;"> {
</span><span style="color:#008000;">//</span><span style="color:#008000;"> Not support websocket</span>
<span style="color:#000000;"> }
</span><span style="color:#008000;">//</span><span style="color:#008000;">WebSocket </span>
websocket.onerror = <span style="color:#0000ff;">function</span><span style="color:#000000;"> () {
setMessageInnerHTML(</span>"WebSocket "<span style="color:#000000;">);
};
</span><span style="color:#008000;">//</span><span style="color:#008000;">WebSocket </span>
websocket.onopen = <span style="color:#0000ff;">function</span><span style="color:#000000;"> () {
setMessageInnerHTML(</span>"WebSocket "<span style="color:#000000;">);
};
</span><span style="color:#008000;">//</span><span style="color:#008000;"> </span>
websocket.onmessage = <span style="color:#0000ff;">function</span><span style="color:#000000;"> (event) {
alertTip(event.data);
</span><span style="color:#008000;">//</span><span style="color:#008000;"> websocket.close();</span>
<span style="color:#008000;">//</span><span style="color:#008000;"> alert("webSocket !")</span>
<span style="color:#000000;"> };
</span><span style="color:#008000;">//</span><span style="color:#008000;"> , , websocket , ,server 。</span>
window.onbeforeunload = <span style="color:#0000ff;">function</span><span style="color:#000000;"> () {
closeWebSocket();
};
</span><span style="color:#008000;">//</span><span style="color:#008000;"> WebSocket </span>
<span style="color:#0000ff;">function</span><span style="color:#000000;"> closeWebSocket() {
websocket.close();
}
</span><span style="color:#008000;">//</span><span style="color:#008000;"> </span>
websocket.onclose = <span style="color:#0000ff;">function</span><span style="color:#000000;"> () {
setMessageInnerHTML(</span>"WebSocket "<span style="color:#000000;">);
};
</span><span style="color:#008000;">//</span><span style="color:#008000;"> </span>
<span style="color:#0000ff;">function</span><span style="color:#000000;"> setMessageInnerHTML(innerHTML) {
</span><span style="color:#008000;">//</span><span style="color:#008000;"> document.getElementById('message').innerHTML += innerHTML + '<br/>';</span>
<span style="color:#000000;"> }
</span>
업무 호출
WebSocket ws = new WebSocket();
JSONObject jo = new JSONObject();
jo.put("message", " !");
jo.put("To", "admin");// admin
try {
ws.onMessage(jo.toString());
} catch (IOException e) {
e.printStackTrace();
}
감사
전재 대상:https://www.cnblogs.com/yadongliang/p/11459903.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.