<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<WebSocketSession> sessionList = new ArrayList<WebSocketSession>();
/**
* Ŭ¶óÀ̾ðÆ® ¿¬°á ÀÌÈÄ¿¡ ½ÇÇàµÇ´Â ¸Þ¼Òµå
*/
@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
- Spring legacy project (mvc project)
<!-- 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<WebSocketSession> sessionList = new ArrayList<WebSocketSession>();
/**
* Ŭ¶óÀ̾ðÆ® ¿¬°á ÀÌÈÄ¿¡ ½ÇÇàµÇ´Â ¸Þ¼Òµå
*/
@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 |
- socket.js ´Ù¿î·Îµå
- sockjs-0.3.4.js << click
- 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 |