Hallo,
ich verwende WebSocket für einen Chat. Die Verbindung zwischen Client und Server funktioniert soweit sehr gut. Ich kann Daten an Server senden und empfangen. Das ganze funktioniert aber nur mit einem einzigen Client. Was muss ich machen, dass wenn der Server sendet, alle anderen Clients auch die Meldung erhalten?
ich verwende WebSocket für einen Chat. Die Verbindung zwischen Client und Server funktioniert soweit sehr gut. Ich kann Daten an Server senden und empfangen. Das ganze funktioniert aber nur mit einem einzigen Client. Was muss ich machen, dass wenn der Server sendet, alle anderen Clients auch die Meldung erhalten?
Java:
package ch.yourclick.zt.chat;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/chat")
public class ChatEndpoint {
@OnOpen
public void handleOpen() {
System.out.println("Client is now connected");
}
@OnMessage
public String handleMessage(String message) {
System.out.println("Client: " + message + "\n");
return message;
}
@OnClose
public void handleClose() {
System.out.println("Client is now disconnected");
}
@OnError
public void handleError(Throwable t) {
t.printStackTrace();
}
}
HTML:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Chat</title>
</head>
<body>
<form id="chat">
<input type="text" id="client-msg">
<input type="submit" value="Send">
</form>
<div class="result"></div>
<script src='../assets/js/script.js'></script>
</body>
</html>
Javascript:
const log = console.log.bind(console);
/* CHAT */
const webSocket = new WebSocket('ws://localhost:8080/zt_productions_war/chat');
const chatResult = document.querySelector('.result');
// Open
webSocket.onopen = (msg) => {
log("Server is now connected\n");
};
// Message
webSocket.onmessage = (msg) => {
chatResult.innerHTML += "Server says: " + msg.data;
};
// Close
webSocket.onclose = () => {
webSocket.send('Client has been disconnected');
log("Server is now closed\n");
};
// Error
webSocket.onerror = () => {
log("There is an error. Try it again later.");
};
// Submit
document.getElementById("chat").addEventListener('submit', (e) => {
e.preventDefault();
let clientMsg = document.getElementById('client-msg');
webSocket.send(clientMsg.value);
chatResult.innerHTML += clientMsg.value + '<br>';
clientMsg.value = '';
});