Session.getBagicRemote
는 blocking method, Session.getAsyncRemote
는 nonblocking method로 RemoteEndpoint를 리턴
✔ blocking method in java
작업이 완료 될 때 까지 스레드를 블로킹(대기상태)로 만드는 메소드. 스레드가 블로킹이 되면 다른 일을 할 수 없고 블로킹을 빠져나오기 위해 인터럽트도 할 수 없다.
void RemoteEndpoint.Basic.sendText(String text)
: 텍스트 메세지를 보낼 때 사용. 전체 메세지가 전달 되기 전까지 block
void RemoteEndpoint.Basic.sendBinary(ByteBuffer data)
: 바이너리 메세지를 보낼 때 사용. 전체 메세지가 전달 되기 전까지 block
void RemoteEndpoint.sendPing(ByteBuffer appData)
: ping frame 을 보냄
oid RemoteEndpoint.sendPong(ByteBuffer appData)
: pong frame을 보냄
일반적으로 하나의 endpoint 클래스는 하나의 연결과, 하나의 사용자만 연관이 되어있다. 그러나 연결 된 모든 사용자에게 메세지를 보내야 하는 경우가 있는데, 이를 위해서 Session 인터페이스는 getOpenSessions
메서드를 제공한다.
@ServerEndpoint("/echoall")
public class EchoAllEndpoint {
@OnMessage
public void onMessage(Session session, String msg) {
try {
for (Session sess : session.getOpenSessions()) {
if (sess.isOpen())
sess.getBasicRemote().sendText(msg);
}
} catch (IOException e) { ... }
}
}
@onMessage
를 사용해서 들어오는 메세지들을 핸들링 할 수 있다.
@ServerEndpoint("/receive")
public class ReceiveEndpoint {
@OnMessage
public void textMessage(Session session, String msg) {
System.out.println("Text message: " + msg);
}
@OnMessage
public void binaryMessage(Session session, ByteBuffer msg) {
System.out.println("Binary message: " + msg.toString());
}
@OnMessage
public void pongMessage(Session session, PongMessage msg) {
System.out.println("Pong message: " +
msg.getApplicationData().toString());
}
}