java多线程测试websocket demo(使用文件流)

这个demo主要是利用Java多线程来测试WebSocket通信。首先,创建一个WebSocket服务器和客户端,然后使用多线程来模拟多个客户端同时连接服务器进行通信。通过多线程测试,可以验证WebSocket通信的并发性能和稳定性。同时,可以通过多线程测试来模拟不同场景下的并发请求,以便对WebSocket服务器进行压力测试和性能优化。整个demo会包括创建WebSocket服务器和客户端的代码,以及多线程测试的代码实现。通过这个demo,可以更好地了解WebSocket通信的多线程测试方法和实现。

java 复制代码
@ClientEndpoint
public class WebSocketClient {

    private static final AtomicInteger connectedCount = new AtomicInteger(0);
    private static final LongAdder firstFrameLatencySum = new LongAdder();
    private static final CountDownLatch latch = new CountDownLatch(20);
    private static final int MESSAGE_SIZE = 1024;

    private static final int CONCURRENCY_LEVEL = 20;

    private static final AtomicLong startTime = new AtomicLong(0);

    @OnOpen
    public void onOpen(Session session) {
        connectedCount.incrementAndGet();
    }

    @OnMessage
    public void onMessage(String message) {
        startTime.set(System.nanoTime());

        System.out.println(Thread.currentThread().getName() + ": " + message);
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        connectedCount.decrementAndGet();
    }

    public static void main(String[] args) throws URISyntaxException, Exception {
        for (int i = 0; i < CONCURRENCY_LEVEL; i++) {
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            Session session = container.connectToServer(WebSocketClient.class, new URI("ws://you_url"));
            session.getBasicRemote().sendBinary(ByteBuffer.wrap(generateMessage()));
            latch.countDown();
        }

        latch.await(100, TimeUnit.SECONDS);
        System.out.println("Connected clients: " + connectedCount.get());
        System.out.println("Average first frame latency: " + (firstFrameLatencySum.sum() / CONCURRENCY_LEVEL) + " nanoseconds");
    }

    private static byte[] generateMessage() {
        try {
            FileInputStream fileInputStream = new FileInputStream("D:\\smn.wav");
            byte[] fileData = new byte[fileInputStream.available()];
            fileInputStream.read(fileData);
            fileInputStream.close();
            return ArrayUtils.subarray(fileData, 0, 300000);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
相关推荐
Coder_Boy_4 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.4 分钟前
Day06——权限认证-项目集成
java
瑶山7 分钟前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy14 分钟前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
lly20240615 分钟前
C++ 文件和流
开发语言
2301_8187320616 分钟前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
m0_7066532321 分钟前
分布式系统安全通信
开发语言·c++·算法
2501_9419820529 分钟前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
喵手31 分钟前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集
寻寻觅觅☆1 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++