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);
        }
    }
}
相关推荐
努力努力再努力wz3 分钟前
【c++进阶系列】:万字详解多态
java·linux·运维·开发语言·c++
秦亿凡6 分钟前
多线程下为什么用ConcurrentHashMap而不是HashMap
java·开发语言
没有梦想的咸鱼185-1037-16639 分钟前
AI大模型支持下的:CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
人工智能·python·深度学习·机器学习·chatgpt·数据挖掘·数据分析
知其然亦知其所以然17 分钟前
SpringAI + Groq 实战:3 分钟教你搭建超快聊天机器人!
java·后端·openai
Ratten20 分钟前
批量识别图片文字保存到 excel 中
python
阿波罗尼亚31 分钟前
ExcelUtils实现 设置内容 插入行 复制行列格式
java·开发语言
Monkey-旭39 分钟前
Android 定位技术全解析:从基础实现到精准优化
android·java·kotlin·地图·定位
带刺的坐椅39 分钟前
Solon StateMachine 实现状态机使用示例详解
java·solon·状态机
WSSWWWSSW40 分钟前
Seaborn数据可视化实战:Seaborn多变量图表绘制高级教程
python·信息可视化·数据分析·matplotlib·seaborn
Yyyy4821 小时前
MyCAT高可用
java·运维