0
点赞
收藏
分享

微信扫一扫

Java WebSocket Demo ,案例手把手教学 记录(11)


Java WebSocket Demo ,案例手把手教学 记录(11)

  • 环境与设备
  • 第一步:新建一个 java 项目
  • 第二步:在 pom.xml 加入依赖 org.java-websocket
  • 第三步:编写websocket核心代码:创建类
  • 第四步:编写websocket核心代码:基础代码
  • 测试,我们写一个h5前端
  • 扩展

希望能写一些简单的教程和案例分享给需要的人

java websocket 服务端

环境与设备

系统:window
开发工具:IDEA 2022.2.3

JAVA 网络通讯开发

第一步:新建一个 java 项目

  1. 填写项目名字
  2. 选择 JAVA 语言
  3. 选择 Maven
  4. 选择自己的JDK版本 (我当前用的是 1.8.0_301)

Java WebSocket Demo ,案例手把手教学 记录(11)_System

Java WebSocket Demo ,案例手把手教学 记录(11)_开发语言_02

第二步:在 pom.xml 加入依赖 org.java-websocket

<dependencies>
        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.5.2</version>
        </dependency>
    </dependencies>

Java WebSocket Demo ,案例手把手教学 记录(11)_ide_03

第三步:编写websocket核心代码:创建类

在 org.example 上右击鼠标(进入菜单)选择 Java Calss 创建一个类 :WebSocketServerDao 如下面两图操作

Java WebSocket Demo ,案例手把手教学 记录(11)_websocket_04

Java WebSocket Demo ,案例手把手教学 记录(11)_ide_05

第四步:编写websocket核心代码:基础代码

package org.example;

import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class WebSocketServerDao extends WebSocketServer {

    private static List<WebSocket> webSocketList = new ArrayList<>();
    private ExecutorService executorService; // 线程池

    public WebSocketServerDao(int port) {
        super(new InetSocketAddress(port));
        executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); // 初始化线程池
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        webSocketList.add(conn);
        System.out.println("WebSocket连接已建立:" + conn.getRemoteSocketAddress());
    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        webSocketList.remove(conn);
        System.out.println("WebSocket连接已关闭:" + conn.getRemoteSocketAddress());
    }

    @Override
    public void onMessage(WebSocket conn, String message) {
        System.out.println("WebSocket接收到消息:" + message);
        executorService.execute(() -> { // 使用线程池处理消息
            conn.send("WebSocket服务端回复:" + message); // 发送消息到WebSocket客户端
        });
    }

    @Override
    public void onError(WebSocket conn, Exception ex) {
        System.err.println("WebSocket异常:" + ex.getMessage());
    }

    @Override
    public void onStart() {
        System.out.println("启动");
    }
}

Java WebSocket Demo ,案例手把手教学 记录(11)_ide_06

测试,我们写一个h5前端

<!DOCTYPE html>
<html>

<head>
    <title>WebSocket Demo</title>
</head>

<body>
    <input type="text" id="messageInput" />
    <button onclick="sendMessage()">发送消息</button>
    <ul id="messages"></ul>

    <script>
        const socket = new WebSocket('ws://127.0.0.1:8088');

        socket.addEventListener('open', (event) => {
            console.log('WebSocket 连接已建立:', event);
            // 在这里可以发送消息
            socket.send('你好!');
        });

        // 连接打开时触发
        socket.onopen = function (event) {
            console.log("WebSocket 连接已打开");
        };

        // 收到消息时触发
        socket.onmessage = function (event) {
            console.log("收到服务器消息:" + event.data);

            var li = document.createElement("li");
            li.textContent = event.data;
            document.getElementById("messages").appendChild(li);
        };

        // 连接关闭时触发
        socket.onclose = function (event) {
            console.log("WebSocket 连接已关闭");
        };

        // 发送消息
        function sendMessage() {
            var message = document.getElementById("messageInput").value;
            socket.send(message);
        }
    </script>
</body>

</html>

Java WebSocket Demo ,案例手把手教学 记录(11)_ide_07


Java WebSocket Demo ,案例手把手教学 记录(11)_System_08


Java WebSocket Demo ,案例手把手教学 记录(11)_开发语言_09


Java WebSocket Demo ,案例手把手教学 记录(11)_java_10


Java WebSocket Demo ,案例手把手教学 记录(11)_java_11

扩展

如果我们要对这个进行扩展,我们就在 onMessage 里面做扩展就好了,到时候可以写一个 接收和发送的工具类,来做通讯中转。


举报

相关推荐

0 条评论