JSP/SERVLET
2018.02.19 / 01:03

spring websocket äÆà ¿¹Á¦

µðÆÌ
Ãßõ ¼ö 238

<Spring WebSocket>


        <°³¹ßȯ°æ>

  • SpringFramework 4.3.5 (ÀÌ»ó ¹öÀüºÎÅÍ È£È¯)
    • Spring legacy project (mvc project)
  • WebSocket 4.1.6
        <!-- WebSocket -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
cs

    • jackson (Çʼö)

        <!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
            <scope>runtime</scope>
        </dependency>
cs
  • Tomcat 8.0 (ÀÌ»ó ¹öÀüºÎÅÍ È£È¯)
  • jdk 1.8.0 (ÀÌ»ó ¹öÀüºÎÅÍ È£È¯)


      <Ãß°¡¼³Á¤>

<<°æ·Î>>
        
  • EchoHandler.java »ý¼º
    import java.util.ArrayList;
    import java.util.List;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.socket.CloseStatus;
    import org.springframework.web.socket.TextMessage;
    import org.springframework.web.socket.WebSocketSession;
    import org.springframework.web.socket.handler.TextWebSocketHandler;
    public class EchoHandler extends TextWebSocketHandler{
    private static Logger logger = LoggerFactory.getLogger(EchoHandler.class);
        
        private List&lt;WebSocketSession&gt; sessionList = new ArrayList&lt;WebSocketSession&gt;();
        /**
         * Å¬¶óÀ̾ðÆ® ¿¬°á ÀÌÈÄ¿¡ ½ÇÇàµÇ´Â ¸Þ¼Òµå
         */
        @Override
        public void afterConnectionEstablished(WebSocketSession session)
                throws Exception {
            sessionList.add(session);
            logger.info("{} ¿¬°áµÊ", session.getId());
        }
        /**
         * Å¬¶óÀ̾ðÆ®°¡ À¥¼ÒÄϼ­¹ö·Î ¸Þ½ÃÁö¸¦ Àü¼ÛÇßÀ» ¶§ ½ÇÇàµÇ´Â ¸Þ¼Òµå
         */
        @Override
        protected void handleTextMessage(WebSocketSession session,
             
            TextMessage message) throws Exception {
            logger.info("{}·Î ºÎÅÍ {} ¹ÞÀ½", session.getId(), message.getPayload());
            for(WebSocketSession sess : sessionList){
                sess.sendMessage(new TextMessage(session.getId() +" : "+ message.getPayload()));
            }
        }
        /**
         * Å¬¶óÀ̾ðÆ®°¡ ¿¬°áÀ» ²÷¾úÀ» ¶§ ½ÇÇàµÇ´Â ¸Þ¼Òµå
         */
        @Override
        public void afterConnectionClosed(WebSocketSession session,
                CloseStatus status) throws Exception {
            sessionList.remove(session);
            logger.info("{} ¿¬°á ²÷±è", session.getId());
        }
    }
    cs



    • servlet-context.xml ¼³Á¤
      • namespaces¿¡ websocket Ãß°¡
     

      • source¿¡ ¼Ò½º Ãß°¡

    <beans:bean id="echoHandler" class="ms.mscom.msapp.EchoHandler"/>
    <websocket:handlers>
        <websocket:mapping handler="echoHandler" path="/echo" />
        <websocket:sockjs />
    </websocket:handlers>
    cs



    • chat.jsp »ý¼º
      • jquery CDN : https://code.jquery.com/jquery-3.1.1.min.js

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSP</title>
    <script type="text/javascript" src="<c:url value="/resources/js/jquery-3.1.1.min.js"/>"></script>
    <script type="text/javascript" src="<c:url value="/resources/js/sockjs-0.3.4.js"/>"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#sendBtn").click(function() {
                sendMessage();
            });
        });
        var sock;
        //À¤¼ÒÄÏÀ» ÁöÁ¤ÇÑ url·Î ¿¬°áÇÑ´Ù.
        sock = new SockJS("<c:url value="/echo"/>");
        //ÀÚ¹Ù½ºÅ©¸³Æ® ¾È¿¡ functionÀ» Áý¾î³ÖÀ» ¼ö ÀÖÀ½.
        //µ¥ÀÌÅÍ°¡ ³ªÇÑÅ× Àü´ÞµÇ?ÂÀ? ¶§ ÀÚµ¿À¸·Î ½ÇÇàµÇ´Â function
        sock.onmessage = onMessage;
        //µ¥ÀÌÅ͸¦ ²÷°í½ÍÀ»¶§ ½ÇÇàÇϴ ¸Þ¼Òµå
        sock.onclose = onClose;
        /* sock.onopen = function(){
            sock.send($("#message").val());
        }; */
        function sendMessage() {
            /*¼ÒÄÏÀ¸·Î º¸³»°Ú´Ù.  */
            sock.send($("#message").val());
        }
        //evt ÆĶó¹ÌÅʹ À¥¼ÒÄÏÀ» º¸³»ÁØ µ¥ÀÌÅÍ´Ù.(ÀÚµ¿À¸·Î µé¾î¿È)
        function onMessage(evt) {
            var data = evt.data;
            $("#data").append(data + "<br/>");
            //sock.close();
        }
        function onClose(evt) {
            $("#data").append("¿¬°á ²÷±è");
        }
    </script>
    </head>
    <body>
        <input type="text" id="message" />
        <input type="button" id="sendBtn" value="Àü¼Û" />
        <div id="data"></div>
    </body>
    </html>
    cs



    • client ½ÇÇà