当前位置: 首页 > news >正文

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

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

@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);@OnOpenpublic void onOpen(Session session) {connectedCount.incrementAndGet();}@OnMessagepublic void onMessage(String message) {startTime.set(System.nanoTime());System.out.println(Thread.currentThread().getName() + ": " + message);}@OnClosepublic 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);}}
}
http://www.lryc.cn/news/287936.html

相关文章:

  • Tosei 自助网络店铺管理系统network_test.php_RCE漏洞复现
  • uni-app 国际化
  • git:git reset 和 git revert
  • LeetCode:670. 最大交换(Java 贪心)
  • 【STM32】STM32学习笔记-Unix时间戳(41)
  • 2016年认证杯SPSSPRO杯数学建模B题(第一阶段)低分辨率下看世界全过程文档及程序
  • 16、Kafka ------ SpringBoot 整合 Kafka (配置 Kafka 属性 及对应的 属性处理类 解析)
  • 【蓝桥杯选拔赛真题61】python偶数平方 第十五届青少年组蓝桥杯python 选拔赛比赛真题解析
  • 智能语音识别源码系统+语义理解+对话管理+语音合成 带完整的搭建教程
  • cdh6.3.2的hive配udf
  • 在DevEco开发工具中,使用Previewer预览界面中的UI组件
  • 【蓝桥杯冲冲冲】旅行计划
  • Ultraleap 3Di配置以及在 Unity 中使用 Ultraleap 3Di手部跟踪
  • HarmonyOS鸿蒙学习基础篇 - Text文本组件
  • pytorch学习笔记(十一)
  • 【并发编程】 synchronized的普通方法,静态方法,锁对象,锁升级过程,可重入锁,非公平锁
  • jQuery 删除元素 —— W3school 详解 简单易懂(十四)
  • 在 Linux 上搭建 Java 环境
  • 深度学习-Pytorch如何保存和加载模型
  • 2.数据结构 顺序表(自留笔记)
  • 将python打包成exe文件
  • 大数据处理,Pandas与SQL高效读写大型数据集
  • 【2024年5月备考新增】《软考高项论文专题 (2)论文背景(合集)》
  • Mysql复习1--理论基础+操作实践--更新中
  • 微信小程序打卡定位实现方案
  • 小迪安全23WEB 攻防-Python 考点CTF 与 CMS-SSTI 模版注入PYC 反编译
  • 计算机毕业设计 基于SpringBoot的律师事务所案件管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 如何使用宝塔面板配置Nginx反向代理WebSocket(wss)
  • vulhub之redis篇
  • Lua简介和应用场景介绍