WebSocketチャットプログラム|簡単チャット


最終的には、この機能を「航空と非工事」に挿入します.そのため、他の設定を含まずに公共の部分だけを記録します.
SocketHandlerクラスの作成
@Component
public class SocketHandler extends TextWebSocketHandler {
	
	@Override
	public void handleTextMessage(WebSocketSession session, TextMessage message) {
		//메시지 발송
	}
	
	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		//소켓 연결
	}
	
	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
		//소켓 종료
	}
}
  • TextWebSocketHandler:HandleTextMessageを実行し、メッセージタイプに応じてHandleBinaryMessageまたはHandleTextMessageを実行します.
  • HandleTextMessage:メッセージを受信して実行します.
  • afterConnectionEstived:Webソケットに接続するときに動作します.
  • afterConnectionClosed:Webソケット接続が終了したときに動作します.
  • SocketHandler|HandleTextMessageメソッド
    HashMap<String, WebSocketSession> sessionMap = new HashMap<>(); 
    
    @Override
    	public void handleTextMessage(WebSocketSession session, TextMessage message) {
    		//메시지 발송
    		String msg = message.getPayload();
    		for(String key : sessionMap.keySet()) {
    			WebSocketSession wss = sessionMap.get(key);
    			try {
    				wss.sendMessage(new TextMessage(msg));
    			}catch(Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
  • message.getPayload():メッセージのテキスト値を取得します.
  • wss.sendMessage(new TextMessage(msg)); : msgをテキストメッセージに変換し、セッションMapに格納されているすべてのセッションにメッセージを送信します.
  • SocketHandler|aftConnectionEstiveMethod
    @Override
    	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    		//소켓 연결
    		super.afterConnectionEstablished(session);
    		sessionMap.put(session.getId(), session);
    	}
  • sessionMap.put(session.getId(), session); : セッションマッピングには、受信したセッションの「ID」(String)と「Web SocketSession」(Web SocketSession)が挿入されます.
  • SocketHandler|aftConnectionClosedメソッド
    @Override
    	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
    		//소켓 종료
    		sessionMap.remove(session.getId());
    		super.afterConnectionClosed(session, status);
    	}
  • sessionMap.remove(session.getId()); : セッションマッピングからセッションが終了したID(キー)によって削除されます.
  • WebSocketConfigクラスの作成
    @Configuration
    @EnableWebSocket
    public class WebSocketConfig implements WebSocketConfigurer{
    
    	@Autowired
    	SocketHandler socketHandler;
    	
    	@Override
    	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    		registry.addHandler(socketHandler, "/chating");
    	}
    }
  • @構成:プロファイルの作成の説明.
  • @EnableWebSocket:ほとんどの場合、Webソケットは自動的に設定されます.
  • chat.jsp|javascriptセクション
    var ws;
    
    	function wsOpen(){
    		ws = new WebSocket("ws://" + location.host + "/chating");
    		wsEvt();
    	}
    		
    	function wsEvt() {
    		ws.onopen = function(data){
    			//소켓이 열리면 초기화 세팅하기
    		}
    		
    		ws.onmessage = function(data) {
    			var msg = data.data;
    			if(msg != null && msg.trim() != ''){
    				$("#chating").append("<p>" + msg + "</p>");
    			}
    		}
    
    		document.addEventListener("keypress", function(e){
    			if(e.keyCode == 13){ //enter press
    				send();
    			}
    		});
    	}
    
    	function chatName(){
    		var userName = $("#userName").val();
    		if(userName == null || userName.trim() == ""){
    			alert("사용자 이름을 입력해주세요.");
    			$("#userName").focus();
    		}else{
    			wsOpen();
    			$("#yourName").hide();
    			$("#yourMsg").show();
    		}
    	}
    
    	function send() {
    		var uN = $("#userName").val();
    		var msg = $("#chatting").val();
    		ws.send(uN+" : "+msg);
    		$('#chatting').val("");
    	}
  • ws = new WebSocket("ws://"+ location.host + "/chating"); : wsという特殊なプロトコルを使用して、Webソケット接続を作成します.
  • #Reference
    https://myhappyman.tistory.com/100