我检查了很多答案,但无法解决此问题。任何人都可以使用Java websocket帮助我解决此问题。
ChatEndPoint.Java
@ServerEndpoint(value = "/chat/{username}", decoders = MessageDecoder.class, encoders =MessageEncoder.class)
public class ChatEndPoint {
private Session session;
private static final Set<ChatEndPoint> chatEndpoints = new CopyOnWriteArraySet<ChatEndPoint>();
private static HashMap<String, String> users = new HashMap<String, String>();
@OnOpen
public void onOpen(Session session, @PathParam("username") String username) throws IOException, EncodeException {
System.out.println("connected");
this.session = session;
chatEndpoints.add(this);
users.put(session.getId(), username);
Message message = new Message();
message.setFrom(username);
message.setContent("Connected!");
broadcast(message);
}
@OnMessage
public void onMessage(Session session, Message message) throws IOException, EncodeException {
message.setFrom(users.get(session.getId()));
broadcast(message);
}
@OnClose
public void onClose(Session session) throws IOException, EncodeException {
chatEndpoints.remove(this);
Message message = new Message();
message.setFrom(users.get(session.getId()));
message.setContent("Disconnected!");
broadcast(message);
}
@OnError
public void onError(Session session, Throwable throwable) {
// Do error handling here
System.out.println(session.getId());
}
private static void broadcast(Message message) throws IOException, EncodeException {
chatEndpoints.forEach(endpoint -> {
synchronized (endpoint) {
try {
endpoint.session.getBasicRemote()
.sendObject(message);
}
catch (IOException | EncodeException e) {
e.printStackTrace();
}
}
});
}
}
websocket.js
var ws;
function connect() {
var username = document.getElementById("username").value;
var host = document.location.host;
var pathname = document.location.pathname;
ws = new WebSocket("ws://"+host+"/chat/" + username);
ws.onmessage = function(event) {
var log = document.getElementById("log");
console.log(event.data);
var message = JSON.parse(event.data);
log.innerHTML += message.from + " : " + message.content + "\n";
};
}
function send() {
var content = document.getElementById("msg").value;
var json = JSON.stringify({
"content":content
});
ws.send(json);
}
index.html
<html>
<head>
<title>Chat</title>
</head>
<body>
<table>
<tr>
<td colspan="2">
<input type="text" id="username" placeholder="Username"/>
<button type="button" onclick="connect();" >Connect</button>
</td>
</tr>
<tr>
<td>
<textarea readonly="true" rows="10" cols="80" id="log"></textarea>
</td>
</tr>
<tr>
<td>
<input type="text" size="51" id="msg" placeholder="Message"/>
<button type="button" onclick="send();" >Send</button>
</td>
</tr>
</table>
</body>
<script src="js/websocket.js"></script>
</html>
使用maven和依赖项是:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>
使用Apache tomcat 8.0和Java 8.0。我浪费了将近两天。请任何帮助我。 预先感谢。