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);
        }
    }
}
相关推荐
zzwq.6 小时前
线程池与进程池:concurrent.futures高效并发
python
小超超爱学习99376 小时前
大数乘法,超级简单模板
开发语言·c++·算法
java1234_小锋6 小时前
Java高频面试题:MyBatis如何实现动态数据源切换?
java·开发语言·mybatis
knighthood20016 小时前
Qt5.15+VTK9.3.0实现点云点选功能
开发语言·qt
墨神谕6 小时前
Java中,为什么要将.java文件编译成,class文件,而不是直接将.java编译成机器码
java·开发语言
Ricardo-Yang6 小时前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法
Nyarlathotep01136 小时前
并行设计模式(3):Future模式
java·后端
流星雨在线6 小时前
汇总:Tomcat 安装与常用配置
java·tomcat
soragui6 小时前
【Python】第 4 章:Python 数据结构实现
数据结构·windows·python
小冷coding7 小时前
【面试】结合项目整理的场景面试题,覆盖 Java 基础、锁、多线程、数据库、分布式锁 / 事务、消息中间件等核心维度
java·数据库·面试