How does Java Websocket implement the online drawing board function?
Websocket is a new protocol recommended by HTML5, which allows the client and server to send messages to each other and achieve real-time communication. This protocol can make our online drawing board function more reliable, secure and real-time. In the following article, we will introduce how to use Java Websocket to implement the online drawing board function, and attach some sample code to help everyone understand.
First of all, we need to use the Java Websocket framework, which can help us implement the Websocket protocol quickly and simply. The following is some sample code for message broadcast using Java Websocket:
@ServerEndpoint("/broadcast") public class Broadcaster { static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); @OnMessage public void onMessage(String message, Session session) throws IOException, EncodeException { synchronized (sessions) { for (Session s : sessions) { if (!s.equals(session)) { s.getBasicRemote().sendText(message); } } } } @OnOpen public void onOpen(Session session, EndpointConfig config) { sessions.add(session); } @OnClose public void onClose(Session session, CloseReason reason) { sessions.remove(session); } }
In this sample code, we create a Websocket endpoint annotated with "/broadcast". Whenever there is a new connection, the Websocket server calls the onOpen() method. This method adds the client connection to a collection. Whenever a client sends a message, the Websocket server calls the onMessage() method. The onMessage() method iterates through all connected clients and then sends the message to all clients except the sender of the message. Whenever a client disconnects, the Websocket server calls the onClose() method, which removes the connection from the connected collection.
Next, we need to define a canvas component, which is controlled by front-end JavaScript, and connect the Java object that manages the artboard to Websocket:
window.onload = function() { var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); var drawing = false; var lastX, lastY; var socket = new WebSocket('<websocket_url>'); socket.onopen = function() { console.log('Connection opened'); }; socket.onmessage = function(message) { console.log('Message received: ' + message.data); var data = JSON.parse(message.data); drawLine(data.x1, data.y1, data.x2, data.y2, data.color); }; socket.onerror = function() { console.log('Error'); }; socket.onclose = function() { console.log('Connection closed'); }; function startDrawing(event) { drawing = true; lastX = event.pageX - canvas.offsetLeft; lastY = event.pageY - canvas.offsetTop; } function stopDrawing() { drawing = false; socket.send(JSON.stringify({ eventType: 'stopDrawing' })); } function onDrawing(event) { if (!drawing) return; var currentX = event.pageX - canvas.offsetLeft; var currentY = event.pageY - canvas.offsetTop; drawLine(lastX, lastY, currentX, currentY, '#000'); socket.send(JSON.stringify({ eventType: 'drawing', x1: lastX, y1: lastY, x2: currentX, y2: currentY, color: '#000' })); lastX = currentX; lastY = currentY; } function drawLine(x1, y1, x2, y2, color) { context.beginPath(); context.moveTo(x1, y1); context.lineTo(x2, y2); context.strokeStyle = color; context.stroke(); } canvas.addEventListener('mousedown', startDrawing); canvas.addEventListener('mouseup', stopDrawing); canvas.addEventListener('mousemove', onDrawing); };
In this sample code, we use The WebSocket object sets onopen, onmessage, onerror and onclose events to handle the connection and data processing between the client JavaScript code and the WebSocket server. When the mouse is pressed, the client code will call the startDrawing() function to draw the trajectory of subsequent mouse movement onto the canvas, and call the socket.send() method to send the instruction to the Websocket server. After receiving the instructions sent by the client, the server forwards these instructions to all connected clients. When the mouse is released, the client code will call the stopDrawing() function. This function notifies the server that the drawing process has stopped.
Finally, we need to configure Websocket on the server. Here is some Websocket configuration sample code:
<dependencies> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.glassfish.tyrus.bundles</groupId> <artifactId>tyrus-standalone-server</artifactId> <version>1.13.1</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webResources> <resource> <directory>src/main/webapp</directory> </resource> </webResources> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> <phase>install</phase> <configuration> <mainClass>org.glassfish.tyrus.standalone.Server</mainClass> <arguments> <argument>--host</argument> <argument>localhost</argument> <argument>--port</argument> <argument>8090</argument> <argument>--contextPath</argument> <argument>/</argument> <argument>--appBase</argument> <argument>./src/main/webapp</argument> <argument>--monitoring</argument> </arguments> <classpathScope>compile</classpathScope> </configuration> </execution> </executions> </plugin> </plugins> </build> <repositories> <repository> <id>repo.maven.apache.org</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> <profiles> <profile> <id>launch</id> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> <phase>install</phase> <configuration> <mainClass>com.test.websocket.Broadcaster</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
In this sample code, we use Maven to compile, build and deploy a Java web application, and use the tyrus-standalone-server module to provide support for the WebSocket protocol.
We use the above code to easily implement the online drawing board function. This feature can be used in many situations, from doctors to better analyze conditions with patients to educators to share answers with students. The online drawing board function based on Websocket can make these occasions more convenient and efficient.
The above is the detailed content of How does Java Websocket implement the online drawing board function?. For more information, please follow other related articles on the PHP Chinese website!