Websocket은 자바 백그라운드에서 메시지를 프론트 데스크톱으로 주동적으로 전송합니다

14573 단어
앞에 쓰다
수요: 프로젝트 테스트, 사용자 로그인 실패가 부족하면 관리자에게 메시지를 전달합니다. 이 방식을 생각하면 사용자 로그인이 실패할 때 관리자 사용자는 페이지에서 꽝꽝 난탄하는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/best/p/5695570.html
  • https://www.cnblogs.com/freud/p/8397934.html

  •  
    전재 대상:https://www.cnblogs.com/yadongliang/p/11459903.html

    좋은 웹페이지 즐겨찾기