|
|
메이븐 설정
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.0</version>
<scope>runtime</scope>
</dependency>
java web클라이언트 소스
package t8j8.examples.client;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Scanner;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_17;
import org.java_websocket.handshake.ServerHandshake;
public class TestTocatWebSocket {
public static void main(String[] args) throws URISyntaxException {
String url = "ws://localhost:8080/t8j8/ws/chat/" + args[0];
WebSocketClient wc = new WebSocketClient(new URI(url), new Draft_17()) {
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println(handshakedata.getHttpStatusMessage());
}
@Override
public void onMessage(String message) {
System.out.println(message);
}
@Override
public void onError(Exception ex) {
}
@Override
public void onClose(int code, String reason, boolean remote) {
}
};
wc.connect();
while (true) {
Scanner scanner = new Scanner(System.in);
String message = scanner.nextLine();
if (message.equals("q")) {
wc.close();
break;
}
scanner.close();
wc.send(message);
}
}
}
서버 소스
package t8j8.examples;
import java.io.IOException;
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.PathParam;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/ws/chat/{nickName}")
public class Chat {
/**
* 연결 대상 집합
*/
private static final Set<Chat> connections = new CopyOnWriteArraySet<Chat>();
private String nickName;
/**
* WebSocket Session
*/
private Session session;
public Chat() {
}
/**
* 열 연결
*
* @param session
* @param nickName
*/
@OnOpen
public void onOpen(Session session,
@PathParam(value = "nickName") String nickName) {
this.session = session;
this.nickName = nickName;
connections.add(this);
String message = String.format("System> %s %s", this.nickName,
" has joined.");
Chat.broadCast(message);
}
/**
* 연결 끊기
*/
@OnClose
public void onClose() {
connections.remove(this);
String message = String.format("System> %s, %s", this.nickName,
" has disconnection.");
Chat.broadCast(message);
}
/**
* 수신 메시지
*
* @param message
* @param nickName
*/
@OnMessage
public void onMessage(String message,
@PathParam(value = "nickName") String nickName) {
Chat.broadCast(nickName + ">" + message);
}
/**
* 오류 메시지 응답
*
* @param throwable
*/
@OnError
public void onError(Throwable throwable) {
System.out.println(throwable.getMessage());
}
/**
* 방송 정보 보내기 또는
*
* @param message
*/
private static void broadCast(String message) {
for (Chat chat : connections) {
try {
synchronized (chat) {
chat.session.getBasicRemote().sendText(message);
}
} catch (IOException e) {
connections.remove(chat);
try {
chat.session.close();
} catch (IOException e1) {
}
Chat.broadCast(String.format("System> %s %s", chat.nickName,
" has bean disconnection."));
}
}
}
}
'코딩 > etc' 카테고리의 다른 글
| 우분투 설정 (0) | 2016.01.05 |
|---|---|
| mysql alias선언 (0) | 2015.12.03 |
| mysql 문 정리 (0) | 2015.11.20 |