
Java Websocket? ??? ????? ??? ??? ??????
?? ??? ??? ???? ??? ??? ???? ??? ?? ? ?? ??? ???? ????. ??? ?????? Websocket? ???? ??? ????, ?? ???? ????? ???? ??? ???? ???? ??, ?? ?? ??? ??? ? ?? ??? ???? ?????. ?? ????.
1. ??? ??
WebSocket? HTML5?? ???? ??? ?????, ??? TCP ???? ??? ??? ???? HTTP ????? ??-?? ??? ??? ????? ?????. WebSocket? ??? ?? ????? ??? ???? ?? ???? API? ???? ??? ?? ??????? ???? ????? ?????.
2. ?? ??
- ??? ??
Java WebSocket ?? ???? ????? pom.xml ??? ?????.
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-server</artifactId>
<version>1.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-container-grizzly-server</artifactId>
<version>1.17</version>
</dependency>
- WebSocket ????? ??
WebSocket ??? ???? ?? javax.websocket.Endpoint ?????? ???? ???? ?????.
import java.io.IOException;
import javax.websocket.Endpoint;
import javax.websocket.EndpointConfig;
import javax.websocket.MessageHandler;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/whiteboard")
public class WhiteboardEndpoint extends Endpoint {
@Override
public void onOpen(Session session, EndpointConfig config) {
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String message) {
// 處理收到的消息
System.out.println("Received message: " + message);
// 廣播消息給所有連接的客戶端
session.getOpenSessions().forEach(s -> {
try {
s.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
});
}
});
}
}
- WebSocket ???? ??
??? ???? ???? WebSocket ???? ? ?? ????? ?????.
import javax.servlet.annotation.WebServlet;
import org.glassfish.tyrus.server.Server;
@WebServlet(name = "WhiteboardServlet", urlPatterns = {"/whiteboard/*"})
public class WhiteboardServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 1L;
private static final int PORT = 8080;
private static Server server;
@Override
public void init() {
server = new Server("localhost", PORT, "/websocket", null, WhiteboardEndpoint.class);
try {
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void destroy() {
server.stop();
}
}
- ??? ?? ??? ??
HTML ???? ?? JavaScript ??? ???? WebSocket ???? ?? ? ??? ?? ??? ?????.
<!DOCTYPE html>
<html>
<head>
<title>Online Whiteboard</title>
<script type="text/javascript">
var socket = new WebSocket("ws://localhost:8080/websocket/whiteboard");
socket.onmessage = function(event) {
// 收到消息時的處理邏輯
console.log("Received message: ", event.data);
};
function send(message) {
// 發(fā)送消息給服務器
socket.send(message);
}
</script>
</head>
<body>
<!-- 在這里放置繪圖相關的HTML節(jié)點 -->
<canvas id="canvas"></canvas>
<button onclick="send('Hello, WebSocket!')">Send Message</button>
</body>
</html>
3. ?? ??
?? ??? ???? ??? ?????? ??? ?? ??? ? ????.
- ??? ??
? JavaScript? ?? ???? ??? ???? ??? ?? WebSocket ??? ??? ??? ?? ? ????. ??? ? ??? ?? ??? ????? ???????? ?? ??? ?????.
- ?? ? ??
???? ????? ??, ??, ?? ? ?? ??? ??? ? ??? ?? ?? ??? ???? ????? ???? ? ????.
- ?? ? ?? ?? ??? ??
??? ?? ? ?? ?? ??? ???? ??? ??? ??? ????? ????? ? ?? ?? ? ?? ?? ??? ??? ?????.
4. ??
? ???? Java WebSocket? ???? ??? ????? ??? ???? ??? ??? ?? ???? ?? ???? ??? ?????. ??? ??? ????? ?? ?? ???? ??? ???? ???? ??? ? ?? ?? ???? ??? ?????. ???? ? ?? ?? Java WebSocket? ?? ?? ?? ???? ?? ????? ??? ? ??? ????.
? ??? Java Websocket? ??? ????? ??? ??? ??????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!