Java websocket 使用

简介

WebSocket 是一种基于 TCP 协议的全双工通信协议,可以在浏览器和服务器之间建立实时、双向的数据通信。在 Java 中,我们可以使用 Java API for WebSocket(JSR 356)来实现 WebSocket。

WebSocket 的作用是在 Web 应用程序中实现实时、双向的数据通信,可以用于在线聊天、在线游戏、实时数据展示等场景。与传统的 HTTP 协议不同,WebSocket 可以保持长连接,实时传输数据,避免了频繁的 HTTP 请求和响应,节省了网络带宽和服务器资源,提高了应用程序的性能和用户体验。

在这里插入图片描述

WebSocket 示例代码

下面是一个使用 Java API for WebSocket 实现的简单的 WebSocket 示例代码:

服务端代码:

import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/chat")
public class ChatServer {
    private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        for (Session s : sessions) {
            if (s.isOpen()) {
                s.getBasicRemote().sendText(message);
            }
        }
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
    }
}

在上面的代码中,我们使用 @ServerEndpoint 注解将 ChatServer 类作为 WebSocket 服务器端的入口点,定义了一个 /chat 的 WebSocket 端点。在 onOpen() 方法中,我们使用 sessions 集合保存当前连接的所有会话。在 onMessage() 方法中,我们遍历 sessions 集合,将收到的消息发送给所有连接的会话。在 onClose() 方法中,我们移除当前会话。这样,我们就实现了一个简单的在线聊天室。

客户端代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Chat</title>
</head>
<body>
    <input type="text" id="message">
    <button onclick="sendMessage()">Send</button>
    <div id="output"></div>
    <script>
        var websocket = new WebSocket("ws://" + window.location.host + "/chat");

        websocket.onmessage = function(event) {
            var output = document.getElementById("output");
            output.innerHTML += event.data + "<br>";
        };

        function sendMessage() {
            var message = document.getElementById("message").value;
            websocket.send(message);
        }
    </script>
</body>
</html>

在上面的代码中,我们使用 JavaScript 创建 WebSocket 对象,建立与 ChatServer 类的 /chat 端点的连接。在 onmessage() 方法中,我们将收到的消息添加到页面的 output 元素中。在 sendMessage() 方法中,我们获取页面的 message 元素的值,并将其发送给服务端。

在运行上面的代码后,我们可以在浏览器中打开多个页面,然后在每个页面的输入框中输入消息,点击 Send 按钮发送消息,就能在所有页面上看到收到的消息了。

总的来说,WebSocket 是一种实现实时、双向数据通信的协议,可以在 Web 应用程序中用于实现在线聊天、在线游戏、实时数据展示等场景。在 Java 中,我们可以使用 Java API for WebSocket 来实现 WebSocket,实现简单、易用、高效、可靠的 WebSocket 应用。

更多

除了上面提到的基本功能之外,Java API for WebSocket(JSR 356)还提供了一些其他的特性,包括:

  1. 编程模型:Java API for WebSocket 提供了基于注解和基于接口两种编程模型,使得开发者可以根据自己的需求选择合适的编程模型。
  2. 生命周期管理:Java API for WebSocket 提供了标准的生命周期管理,包括连接建立、消息接收、连接关闭等阶段,可以方便地管理 WebSocket 的生命周期。
  3. 消息编解码:Java API for WebSocket 提供了消息编解码的支持,可以将 Java 对象转换为 WebSocket 消息,或将 WebSocket 消息转换为 Java 对象。
  4. 子协议支持:Java API for WebSocket 支持子协议,可以根据需要选择合适的子协议,以实现更加灵活的数据传输。
  5. SSL/TLS 支持:Java API for WebSocket 支持 SSL/TLS 安全传输协议,可以保障数据的安全性和完整性。
  6. WebSocket 客户端 API:Java API for WebSocket 还提供了 WebSocket 客户端 API,可以方便地实现 WebSocket 客户端,与服务端进行双向通信。

下面是一个使用 Java API for WebSocket 实现消息编解码的示例代码:

import java.io.IOException;
import java.nio.ByteBuffer;
import javax.websocket.DecodeException;
import javax.websocket.Decoder;
import javax.websocket.EncodeException;
import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;

public class Message {
    private String from;
    private String to;
    private String content;

    // 构造函数、getter 和 setter 略

    public static class MessageEncoder implements Encoder.Text<Message> {
        @Override
        public String encode(Message message) throws EncodeException {
            return message.getFrom() + "|" + message.getTo() + "|" + message.getContent();
        }

        @Override
        public void init(EndpointConfig config) {}

        @Override
        public void destroy() {}
    }

    public static class MessageDecoder implements Decoder.Text<Message> {
        @Override
        public Message decode(String message) throws DecodeException {
            String[] parts = message.split("\\|");
            if (parts.length != 3) {
                throw new DecodeException(message, "Invalid message format");
            }
            Message m = new Message();
            m.setFrom(parts[0]);
            m.setTo(parts[1]);
            m.setContent(parts[2]);
            return m;
        }

        @Override
        public boolean willDecode(String message) {
            return true;
        }

        @Override
        public void init(EndpointConfig config) {}

        @Override
        public void destroy() {}
    }
}

在上面的代码中,我们定义了一个 Message 类,包含 from、to 和 content 三个属性。然后,我们实现了一个 MessageEncoder 类和一个 MessageDecoder 类,分别用于将 Message 对象转换为字符串和将字符串转换为 Message 对象。在 MessageEncoder 类中,我们使用 encode() 方法将 Message 对象转换为字符串,使用 “|” 分隔三个属性。在 MessageDecoder 类中,我们使用 decode() 方法将字符串转换为 Message 对象,使用 “|” 正则表达式将字符串分割为三个部分,然后调用 Message 的 setter 方法设置属性值。

这样,我们就可以在 WebSocket 中传输 Message 对象了,而不需要手动进行字符串的拼接和解析。

小结

总的来说,Java API for WebSocket 提供了丰富的特性,可以帮助开发者快速、简单、高效地实现 WebSocket 应用,提高应用程序的性能和用户体验。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WebSocket是一种协议,它允许在单个 TCP 连接上进行全双工通信。在 Java Web 应用程序中,您可以使用 javax.websocket API 来实现 WebSocket。 以下是使用 Java WebSocket 的一些基本步骤: 1. 创建一个 WebSocket 端点类,该类必须扩展 javax.websocket.Endpoint 类,并覆盖其 onOpen、onClose、onError 和 onMessage 方法。 2. 在您的应用程序中,使用 @ServerEndpoint 注释将 WebSocket 端点类声明为 WebSocket 服务器端点。 3. 在客户端代码中,使用 WebSocket API 来连接到服务器端点。 4. 一旦连接建立,您可以使用 WebSocket API 中的 send 方法发送消息,使用 onMessage 方法处理接收到的消息。 5. 当您完成操作时,使用 close 方法关闭 WebSocket 连接。 下面是一个简单的 WebSocket 示例: ```java @ServerEndpoint("/websocket") public class MyWebSocket { @OnMessage public void onMessage(String message, Session session) { try { session.getBasicRemote().sendText("Received: " + message); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们定义了一个名为 MyWebSocketWebSocket 端点类,并使用 @ServerEndpoint 注释将其声明为 WebSocket 服务器端点。我们还覆盖了 onMessage 方法,以处理接收到的消息,并使用 session.getBasicRemote().sendText 方法将响应发送回客户端。 在客户端代码中,您可以使用以下代码连接到 WebSocket 端点: ```javascript var socket = new WebSocket("ws://localhost:8080/myapp/websocket"); socket.onmessage = function(event) { console.log("Received message: " + event.data); }; socket.send("Hello, server!"); ``` 在上面的代码中,我们创建了一个 WebSocket 对象并连接到服务器端点。我们还定义了一个 onmessage 处理程序来处理接收到的消息,并使用 send 方法发送一条消息到服务器端点。 希望这可以帮助您开始使用 Java WebSocket
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT徐师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值