ubuntu

Ubuntu Java如何实现WebSocket通信

小樊
56
2025-07-29 15:44:40
栏目: 编程语言

在Ubuntu上使用Java实现WebSocket通信,你可以选择多种库和框架。以下是一些流行的选择:

  1. Java-WebSocket: Java-WebSocket是一个用于WebSocket协议的Java库。它提供了一个简单的API来创建WebSocket客户端和服务器。

    • 安装: 你可以直接将Java-WebSocket库添加到你的项目中。如果你使用Maven,可以在pom.xml文件中添加以下依赖:

      <dependency>
          <groupId>org.java-websocket</groupId>
          <artifactId>Java-WebSocket</artifactId>
          <version>1.5.1</version>
      </dependency>
      
    • 服务器端示例:

      import org.java_websocket.WebSocket;
      import org.java_websocket.handshake.ClientHandshake;
      import org.java_websocket.server.WebSocketServer;
      
      import java.net.InetSocketAddress;
      
      public class MyWebSocketServer extends WebSocketServer {
      
          public MyWebSocketServer(int port) {
              super(new InetSocketAddress(port));
          }
      
          @Override
          public void onOpen(WebSocket conn, ClientHandshake handshake) {
              System.out.println("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
          }
      
          @Override
          public void onClose(WebSocket conn, int code, String reason, boolean remote) {
              System.out.println("Closed connection to " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
          }
      
          @Override
          public void onMessage(WebSocket conn, String message) {
              System.out.println("Received message from " + conn.getRemoteSocketAddress().getAddress().getHostAddress() + ": " + message);
          }
      
          @Override
          public void onError(WebSocket conn, Exception ex) {
              ex.printStackTrace();
          }
      
          @Override
          public void onStart() {
              System.out.println("Server started!");
          }
      
          public static void main(String[] args) {
              int port = 8887; // 选择一个端口
              MyWebSocketServer server = new MyWebSocketServer(port);
              server.start();
              System.out.println("WebSocket server started on port: " + port);
          }
      }
      
    • 客户端示例:

      import org.java_websocket.client.WebSocketClient;
      import org.java_websocket.handshake.ServerHandshake;
      
      import java.net.URI;
      import java.net.URISyntaxException;
      
      public class MyWebSocketClient extends WebSocketClient {
      
          public MyWebSocketClient(URI serverUri) {
              super(serverUri);
          }
      
          @Override
          public void onOpen(ServerHandshake handshakedata) {
              System.out.println("Connected to server");
          }
      
          @Override
          public void onMessage(String message) {
              System.out.println("Received message: " + message);
          }
      
          @Override
          public void onClose(int code, String reason, boolean remote) {
              System.out.println("Connection closed by " + (remote ? "remote peer" : "us") + " Code: " + code + " Reason: " + reason);
          }
      
          @Override
          public void onError(Exception ex) {
              ex.printStackTrace();
          }
      
          public static void main(String[] args) throws URISyntaxException {
              URI uri = new URI("ws://localhost:8887"); // WebSocket服务器地址
              MyWebSocketClient client = new MyWebSocketClient(uri);
              client.connect();
          }
      }
      
  2. Spring Boot with Spring WebFlux: 如果你使用Spring Boot,可以利用Spring WebFlux来创建响应式的WebSocket通信。

    • 添加依赖: 在pom.xml中添加以下依赖:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-webflux</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-websocket</artifactId>
      </dependency>
      
    • WebSocket配置:

      import org.springframework.context.annotation.Configuration;
      import org.springframework.messaging.simp.config.MessageBrokerRegistry;
      import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
      import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
      import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
      
      @Configuration
      @EnableWebSocketMessageBroker
      public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
      
          @Override
          public void configureMessageBroker(MessageBrokerRegistry config) {
              config.enableSimpleBroker("/topic");
              config.setApplicationDestinationPrefixes("/app");
          }
      
          @Override
          public void registerStompEndpoints(StompEndpointRegistry registry) {
              registry.addEndpoint("/ws").withSockJS();
          }
      }
      
    • 消息处理:

      import org.springframework.messaging.handler.annotation.MessageMapping;
      import org.springframework.messaging.handler.annotation.SendTo;
      import org.springframework.stereotype.Controller;
      
      @Controller
      public class WebSocketController {
      
          @MessageMapping("/greeting")
          @SendTo("/topic/greetings")
          public Greeting greeting(HelloMessage message) throws Exception {
              Thread.sleep(1000); // simulated delay
              return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
          }
      }
      
    • 客户端: 客户端可以使用JavaScript的SockJSStomp.js库来连接WebSocket服务器。

      <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/stomp-websocket@2.3.3/lib/stomp.min.js"></script>
      <script type="text/javascript">
          var stompClient = null;
      
          function connect() {
              var socket = new SockJS('/ws');
              stompClient = Stomp.over(socket);
              stompClient.connect({}, function (frame) {
                  console.log('Connected: ' + frame);
                  stompClient.subscribe('/topic/greetings', function (greeting) {
                      showGreeting(JSON.parse(greeting.body).content);
                  });
              });
          }
      
          function sendName() {
              stompClient.send("/app/greeting", {}, JSON.stringify({'name': $("#name").val()}));
          }
      
          function showGreeting(message) {
              $("#greetings").append("<tr><td>" + message + "</td></tr>");
          }
      
          $(function () {
              $("form").on('submit', function (e) {
                  e.preventDefault();
              });
              $( "#connect" ).click(function() { connect(); });
              $( "#send" ).click(function() { sendName(); });
          });
      </script>
      

这些是在Ubuntu上使用Java实现WebSocket通信的一些基本方法。你可以根据自己的需求选择合适的库和框架。记得在开发过程中检查库的版本兼容性和依赖关系。

0
看了该问题的人还看了