[vert.x] NetServer로 1대다 메시지 전송하기
이전까지 살펴본 Vert.x 예제는 Echo라는 개념으로 메아리처럼 자기가 한 말을 그대로 다시 (자기만) 돌려받는 기능이고, 이번에 살펴볼 예제는 메시지를 하나 받으면 (자신을 포함한) 여러 사용자에게 전달하는 기능입니다. 예제 이름은 영어로는 Fanout이나 One to Many Multiplexing이라고도 하네요.
[gist id=1775717]
이 예제에서 가장 중요한 클래스는 SharedData라는 클래스입니다. 이 애플리케이션을 실행하면 코어 갯수만큼 이 애플리케이션의 인스턴스가 기본으로 생기는데, 그 떄 만약 커넥션 정보를 담고 있는 Set이 서로 다르면 원하는대로 동작하지 않기때문에(Echo 처럼 동작하거나, 일부 클라이언트에만 메시지를 전달한다던가 하는 문제가 생기더군요.) Vertx 인스턴스가 공유해서 사용할 Set 객체를 만들어주는 SharedData라는 녀석을 사용해서 공유하는 객체를 만들어야합니다.
아. 그리고 하나 더. Vertx라는 클래스의 static 멤버 변수 instance라는 녀석이 독특합니다. 이 녀석은 아마도 여러 인스턴스 중 하나를 가리키는 녀석이겠죠. 이 객체를 이용해서 메시지를 전송합니다. 전송할 때 누구에게 보내는지 지정할 수 있는 sendToHandler를 사용합니다. 첫번째 매개변수는 socket이 연결될 때 받아둔 socket.writeHandlerID입니다. 두번째 매개변수는 전달할 메시지구요.
나머지 코드는 별게 없으니 패스.