SoFunction
Updated on 2025-04-13

Detailed steps for implementing WebSocket client in Java

Step 1: Introduce the necessary dependencies

First, make sure your project contains the dependencies required by the WebSocket client. If you are using Maven, you canAdd the following dependencies to the file:

<dependency>
    <groupId>-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.5.3</version>
</dependency>

This will introduceJava-WebSocketLibrary, which simplifies the implementation process of WebSocket client.

Step 2: Create the WebSocket Client Class

Next, create a custom WebSocket client class, inherit fromWebSocketClient. In this class, you need to override some core methods to handle connections and messages.

import org.java_websocket.;
import org.java_websocket.;
import org.java_websocket.;
import ;

public class MyWebSocketClient extends WebSocketClient {

    public MyWebSocketClient(URI serverUri) {
        super(serverUri);
    }

    @Override
    public void onOpen(ServerHandshake handShake) throws WebSocketException {
        ("Connection established");
        // The initial message can be sent after the connection is successful        send("Hello, Server!");
    }

    @Override
    public void onMessage(String message) {
        ("Received message: " + message);
        // Process the received message as needed    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        ("Connection closed, code: " + code + ", reason: " + reason);
    }

    @Override
    public void onError(Exception ex) {
        ("An error occurred: " + ());
        ();
    }
}

Step 3: Implement client connection

In the main class, create and start the WebSocket client instance. Make sure to specify the correct server address and port.

import org.java_websocket.;
import ;

public class WebSocketMain {

    public static void main(String[] args) {
        try {
            // Replace with your actual WebSocket server address            URI serverUri = new URI("ws://");
            MyWebSocketClient client = new MyWebSocketClient(serverUri);

            // OnOpen method will be called when the connection is successful            ();

            // Keep the main thread running to receive messages            (10000); // After waiting for 10 seconds, the connection will be automatically closed
            // Close the connection            ();
        } catch (Exception e) {
            ();
        }
    }
}

Step 4: Run the client

Compile and run your Java program. If everything works fine, you should see an output similar to the following:

The connection has been established
Received a message: Hello, Server!

This indicates that the client successfully connects to the server and sends and receives messages.

Step 5: Handle more complex messages

To make the client more practical, more message processing logic can be added. For example, parse messages in JSON format, or perform corresponding operations based on different commands.

@Override
public void onMessage(String message) {
    ("Received message: " + message);
    
    // parse JSON messages    try {
        JSONObject jsonObject = new JSONObject(message);
        String command = ("command");
        
        switch (command) {
            case "echo":
                send("Echo received: " + ("data"));
                break;
            case "disconnect":
                close();
                break;
            default:
                ("Unknown Command");
        }
    } catch (JSONException e) {
        ();
    }
}

Step 6: Implement the heartbeat mechanism

To avoid the connection being disconnected by the server for a long time inactive, a heartbeat mechanism can be added. Send a short message regularly to keep the connection active.

@Override
public void onOpen(ServerHandshake handShake) throws WebSocketException {
    ("Connection established");
    
    // Send initial message    send("Hello, Server!");
    
    // Start the heartbeat thread    new Thread(() -&gt; {
        while (()) {
            try {
                // Send a heartbeat every 10 seconds                (10000);
                send("heartbeat");
            } catch (InterruptedException e) {
                break;
            }
        }
    }).start();
}

Step 7: Implement the reconnection strategy

If the connection is unexpectedly interrupted, the client may need to automatically try to reconnect. Can be capturedonCloseEvent and start a retry mechanism to achieve this.

@Override
public void onClose(int code, String reason, boolean remote) {
    ("Connection closed, code: " + code + ", reason: " + reason);
    
    // Try to reconnect    new Thread(() -&gt; {
        try {
            ();
            ("Reconnected successfully");
        } catch (WebSocketException e) {
            ();
        }
    }).start();
}

Step 8: Handle exceptions and errors

Make sure to be inonErrorRecord all errors that occur in the method and take appropriate measures as needed, such as retrying or notifying the administrator.

@Override
public void onError(Exception ex) {
    ("An error occurred: " + ());
    ();
    
    // Close the connection and try to reconnect    close();
}

Step 9: Use a thread-safe queue

When processing messages, especially when multiple threads access and modify data simultaneously, thread-safe data structures should be considered to ensure the security of operations. For example, you can useConcurrentLinkedQueueto store pending messages.

import ;

public class MyWebSocketClient extends WebSocketClient {

    private ConcurrentLinkedQueue&lt;String&gt; messageQueue = new ConcurrentLinkedQueue&lt;&gt;();

    public MyWebSocketClient(URI serverUri) {
        super(serverUri);
    }

    @Override
    public void onMessage(String message) {
        ("Received message: " + message);
        (message);
        
        // Start a thread to process messages in the queue        new Thread(() -&gt; processMessages()).start();
    }

    private void processMessages() {
        while (!()) {
            String message = ();
            // Logic for processing messages            ("Processing: " + message);
        }
    }
}

Step 10: Testing and Debugging

In practical applications, make sure to conduct comprehensive testing of your WebSocket client. Verify the following aspects:

  • Connection establishment: Whether the client can successfully connect to the server.
  • Message sending and receiving: Whether the client can send and receive messages correctly.
  • Error handling: When an error occurs, can the client handle it properly and continue to run.
  • Reconnect mechanism: Whether the client can automatically reconnect after the connection is interrupted.
  • performance:How does the client perform under high load or long-term operation.

In addition, using logging tools can help you better debug and monitor client behavior. Make sure to add enough log information in the critical steps to quickly locate the problem.

Summarize

Through the above steps, you can implement a comprehensive, stable and reliable Java WebSocket client. From introducing necessary libraries to handling various events and exceptions, each step requires careful consideration and testing to ensure that the final solution meets the needs of the project.

This is the end of this article about Java implementation of WebSocket Client. For more related content on Java implementation of WebSocket Client, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!