Cześć,
mam taki problem: chciałbym zaimplementować komunikacje server-klient przy pomocy websocket'ów.
Póki co udało mi się to zrobić w ten sposób że w jednym czasie tylko jeden klient dostaje wiadomość od serwera, a chciałbym żeby otrzymywali wszyscy zalogowani np. żeby każdy klient otrzymywał wiadomość ze swoim ID. Czy mógłby mi ktoś podpowiedzieć w jaki sposób to rozwiązać.
Moja implementacja:
Klient
export class NotificationBoxComponent {
temp: string = ''";
ws: $WebSocket;
constructor() {
this.ws = new $WebSocket("ws://localhost:8088/myWebSocket");
}
subscribe($event) {
this.ws = new $WebSocket("ws://localhost:8080/myWebSocket");
this.ws.getDataStream().subscribe(
res => {
var mes = JSON.parse(res.data).value;
this.temp= mes;
},
);
}
}
Konfiguracja Web Socket
@Configuration
@EnableWebSocket
@EnableScheduling
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
MyHandler myHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler, "/myWebSocket");
}
}
Handler ktory wysyla wiaodmosc
@Component
public class MyHandler extends TextWebSocketHandler {
WebSocketSession session;
public void messageCallback(int count) {
System.out.println("Trying to send:" + count);
if (session != null && session.isOpen()) {
try {
session.sendMessage(new TextMessage("my message "));
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("Don't have open session to send:" + counter);
}
}
@Override
public void afterConnectionEstablished(WebSocketSession session) {
this.session = session;
}
Scheduler wywołujacy wysylanie
@Configuration
@EnableWebSocket
@EnableScheduling
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
MyHandler myHandler ;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler , "/myWebSocket");
}
}