Knowledge Map

웹소켓 채팅 소스 본문

WEB

웹소켓 채팅 소스

2016. 8. 2. 15:09

아래 소스는 웹소켓을 이용한 멀티 채팅 소스이다.

출처 : http://choiyb2.tistory.com/81 


자바 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package 프로젝트명;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
 
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
 
// 아래 주소로 웹소켓이 연결된다.
@ServerEndpoint("/broadcasting")
public class Broadsocket {
 
    private static Set<Session> clients = Collections
            .synchronizedSet(new HashSet<Session>());
 
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        //check message
        System.out.println(message);
        
        
        synchronized (clients) {
            // Iterate over the connected sessions
            // and broadcast the received message
            for (Session client : clients) {
                if (!client.equals(session)) {
                    client.getBasicRemote().sendText(message);
                }
            }
    }
 
    @OnOpen
    public void onOpen(Session session) {
        // Add session to the connected sessions set
        System.out.println(session);
        clients.add(session);
    }
 
    @OnClose
    public void onClose(Session session) {
        // Remove session from the connected sessions set
        clients.remove(session);
    }
}
cs



HTML (& JS)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Testing websockets</title>
</head>
<body>
    <fieldset>
        <textarea id="messageWindow" rows="10" cols="50" readonly="true"></textarea>
        <br/>
        <input id="inputMessage" type="text"/>
        <input type="submit" value="send" onclick="send()" />
    </fieldset>
</body>
    <script type="text/javascript">
        var textarea = document.getElementById("messageWindow");
 
        //프로젝트명 밑의 자바파일 @ServerEndpoint(/boradcasting )으로 간다.
        var webSocket = new WebSocket('ws://localhost:8080/프로젝트명/broadcasting');
        var inputMessage = document.getElementById('inputMessage');
 
    webSocket.onerror = function(event) {
      onError(event)
    };
 
    webSocket.onopen = function(event) {
      onOpen(event)
    };
 
    //채팅 텍스트를 상대로부터 받음
    webSocket.onmessage = function(event) {
      onMessage(event)
    };
 
    //받은 메세지를 화면에 출력
    function onMessage(event) {
        textarea.value += "상대 : " + event.data + "\n";
    }
 
    function onOpen(event) {
        textarea.value += "연결 성공\n";
    }
 
    function onError(event) {
      alert(event.data);
    }
 
    //채팅 텍스트를 상대에게 보냄
    function send() {
        textarea.value += "나 : " + inputMessage.value + "\n";
        webSocket.send(inputMessage.value);
        inputMessage.value = "";
    }
  </script>
</html>
cs


Comments