서버 모니터링 시스템 구축 중 Tomcat Comet으로 했던걸 WebSocket로 변경 하였다.
단순함!
WebSocket Servlet 에서는 Client Open/Close 만 관리하는 public static Set 객체에 Client 정보를 관리하고, Queue Receive 에서 해당 Set 객체에 접근 하여 각각의 Client 에 데이터를 Push 한다.
Thread 간 통신에 public static 변수를 사용하는게 좋은건지 모르겠으나.. Thread 관련 지식이 부족한 관계로 현재는 우선 패스한다.
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ServerEndpoint(value = "/ws/was")
public class WasWebSocket {
private static Logger log = LoggerFactory.getLogger(WasWebSocket.class);
public static Set connections = new CopyOnWriteArraySet<>();
private Session session;
public WasWebSocket() {
log.info("----------- thread start");
}
public Session getSession() {
return this.session;
}
@OnOpen
public void onOpen(Session session) {
log.info("onOpen this: {}, this.sessson: {}", this.getClass(), session);
this.session = session;
synchronized (connections){
connections.add(this);
}
}
@OnClose
public void onClose() {
log.info("onClose");
synchronized (connections){
connections.remove(this);
}
}
@OnMessage
public void onMessage(String message) {
log.info("@OnMessage");
log.info("websocket message: " + message);
}
@OnError
public void onError(Throwable t) throws Throwable {
log.error("e: ", t.toString());
synchronized (connections){
connections.remove(this);
}
}
}
function wasStatusListen() {
var oSocket = new WebSocket(WS_URL + "/ws/was");
oSocket.onmessage = function (e) {
var json = eval("(" + e.data + ")");
if (json.result && json.result == "0000") {
var wasNode = json.data.name;
var heapUsedPercent = json.data.heapUsedPercent;
..
..
처리
}
};
oSocket.onopen = function (e) {
console.log("open");
};
oSocket.onclose = function (e) {
console.log("close");
wasStatusListen();
};
window.unload = function() {
if (oSocket.readyState != 3)
oSocket.disconnect();
}
}
wasStatusListen();
GulimChe.ttf
itextpdf-5.4.0.jar