424
408
2020-02-05 09:32:34
2
170

웹소켓 특정 사용자에게 메시지보내기.동적으로.


안녕하세요 tcp/ip쪽에서 쓰레드네임값을 반환받아와서 웹소켓 id? 닉네임? 이랑 연결해서 메시지를 보내면 특정 사용자에게 뿌려지게 하고싶은데 어떻게 구현하면될까여? 

sessionMap2.put(tic.tcp_message(iomsg, receive) 이소스가 쓰레드네임을 반환합니다.

public class HomeController {

private static final String GUEST_PREFIX = "Thread-";

private static final AtomicInteger connectionIds = new AtomicInteger(0);

private static final Map<String, Session> sessionMap = new HashMap<String, Session>();

private static final Map<String, Session> sessionMap2 = new HashMap<String, Session>();

private String nickname;

private Session session;

TcpIpClient2 tic = new TcpIpClient2();


// 웹 소켓이 연결되면 호출되는 이벤트

@OnOpen

public void onOpen(Session session) {

nickname = GUEST_PREFIX + connectionIds.getAndIncrement();

sessionMap.put(nickname, session);

tic.tcp_open();

}


@OnMessage

public void onMessage(String message, Session session) {

InputStream iomsg = new ByteArrayInputStream(message.getBytes());

String receive = message;

sessionMap2.put(tic.tcp_message(iomsg, receive), session); //쓰레드네임 반환합니다.

if (null == iomsg && "".equals(iomsg))

return;

if (this.nickname.equals("Thread-0")) {

sendToOne(receive, sessionMap2.get("Thread-3"));

} else if (this.nickname.equals("Thread-1")) {

sendToOne(receive, sessionMap.get("Thread-6"));

}

}


void sendToOne(String msg, Session s) {

try {

s.getBasicRemote().sendText(msg);

} catch (IOException e) {

e.printStackTrace();

}

}


0
0
  • 답변 2

  • 인라이너
    283
    2020-02-05 11:13:53

    sessionMap2 가 client, session 의 키/값을 저장하고 있어보이네요.

    메시지 데이터에 타겟 client 가 있을테니 서버에서는 해당 client 를 sessionMap2 에서 get 해서 session 에 메시지 내용을 전송하면 될것 같네요.

    0
  • 424
    408
    2020-02-05 11:26:53

    sendToOne(receive, sessionMap2.get("Thread-3")); 노란색부분을 동적으로 바꿔야할거같은데 음......

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.