当前位置: 首页 > 图灵资讯 > 技术篇> wss JAVA服务器端怎么写

wss JAVA服务器端怎么写

来源:图灵教育
时间:2023-07-20 17:12:45

使用Java编写WebSocket服务器

Websocket是一种基于HTTP协议的全双工通信协议,允许服务器和客户之间实时双向通信。Java可用于Java WebSocket 开发WebSocket服务器的API。

实际问题

假设我们有一个实时在线聊天应用程序,我们希望使用Websocket来实现实时信息传输功能。在此应用程序中,当用户发送消息时,服务器将消息广播给所有在线用户。

开发环境

在开始之前,我们需要确保以下几点:

  • Java 8 或以上版本
  • Maven 3 或以上版本
依赖

首先,我们需要在那里pom.xml以下依赖项添加到文件中:

<dependencies>    <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.13</version>    </dependency></dependencies>
编写Websocket服务器端的Websocket服务器

为了实现WebSocket服务器端的功能,我们需要创建Java类。以下是一个简单的例子:

import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.Collections;import java.util.HashSet;import java.util.Set;@ServerEndpoint("/chat")public class ChatServer {    private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<>());    @OnOpen    public void onOpen(Session session) {        sessions.add(session);        broadcast("A new user has joined the chat.");    }    @OnMessage    public void onMessage(String message, Session session) {        broadcast(session.getId() + ": " + message);    }    @OnClose    public void onClose(Session session) {        sessions.remove(session);        broadcast("A user has left the chat.");    }    @OnError    public void onError(Session session, Throwable error) {        // 处理错误    }    private void broadcast(String message) {        for (Session session : sessions) {            try {                session.getBasicRemote().sendText(message);            } catch (IOException e) {                // 处理发送失败            }        }    }}

我们在上面的例子中使用它@ServerEndpoint注解将ChatServer类别标记为WebSocket服务器端。/chat是我们的Websocket端点地址,客户端将使用该地址与服务器端建立连接。

@OnOpen@OnMessage@OnClose@OnError注释分别用于处理连接建立、接收信息、关闭和错误事件。

ChatServer我们在类中使用一个sessions集合存储所有连接到服务器端的用户对话。当新用户加入聊天时,我们将会话对象添加到集合中,并广播欢迎消息。当用户发送消息时,我们将其广播给所有在线用户。当用户离开聊天时,我们将会话对象从集合中删除,并广播离开消息。

broadcast该方法用于向所有在线用户发送消息。我们使用它Session对象的getBasicRemote().sendText(message)发送文本信息的方法。

部署和测试

我们可以使用以下步骤来部署和测试我们的WebSocket服务器端:

  1. 使用Maven构建项目:mvn clean package
  2. 将生成的.war在支持WebSocket的Java容器中(如Tomcat)部署文件
  3. 启动服务器
  4. 在客户端中,用JavaScript等语言编写WebSocket客户端,连接到ws://localhost:8080/chat并将消息发送到端点。

以下是简单的JavaScriptt WebSocket客户端示例:

const socket = new WebSocket("ws://localhost:8080/chat");// 在建立连接时触发socketetet.onopen = function () {    console.log("Connected to WebSocket server.");    socket.send("Hello, server!");};// 接收到消息时触发socketet.onmessage = function (event) {    console.log("Received message: " + event.data);};// 在连接关闭时触发socketet.onclose = function () {    console.log("Disconnected from WebSocket server.");};

在浏览器的开发者工具控制台中,我们将看到连接建立、信息接收和连接关闭的日期