基于RTKLIB构建高并发通信测试工具
1、 RTKLIB基础动态库生成
RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,由日本东京海洋大学的高须知二开发。在博文《RTKLIB编译及RTCM数据读取样例》中,笔者详细介绍了RTKLIB基础库的编译方法及注意细节,并给出了RTCM数据读取的DEMO,读者可适当参考。
2、 基于RTKLIB构建高并发通信测试工具DEMO
在RTKLIB动态库的基础上,笔者利用其稳定的数据通信功能,尝试进行了高并发通信测试工具的编译工作,模拟了500个NtripClient客户端并发测试,样例代码如下所示。
- void strsvr(int i)
- {
- strsvr_t *svr = (strsvr_t *)malloc(sizeof(strsvr_t));
- int opt[] = { , , , , , , , };
- int strs[] = { STR_NTRIPCLI };
- double nemapos[] = { };
- char *path[];
- for (int i = ; i < ; i++)
- path[i] = malloc(sizeof(char) * );
- path[] = "a:a@127.0.0.1:10001/RTCM ";
- char cmd[][] = { };
- char cmds_p[][] = { };
- strconv_t *conv[] = { };
- strsvrinit(svr, );
- strsvrstart(svr, opt, strs, &path, conv, cmd, cmds_p, nemapos);
- while ()
- {
- trace(, "thread:%d,tick:%d,rec:%d,cnt:%d\n", i, svr->stream[].tick_i,svr->stream[].inb, svr->stream[].tickcnt);
- sleepms();
- }
- }
- extern int ThreadStart(LPTHREAD_START_ROUTINE t, LPVOID p)
- {
- DWORD dwReceiveGpsDataThreadID;
- HANDLE hReceiveDataThread;
- if (!(hReceiveDataThread = CreateThread(NULL,,t,p,, &dwReceiveGpsDataThreadID)))
- {
- CloseHandle(hReceiveDataThread);
- return ;
- }
- return ;
- }
- int main(char argv)
- {
- traceopen("log.txt");
- tracelevel();
- for (int i = ; i < ; i++)
- {
- ThreadStart((LPTHREAD_START_ROUTINE)strsvr1, (LPVOID)i); Sleep();
- }
- getchar();
- traceclose();
- return ;
- }
其中,strsvr函数是并发测试的基础函数,负责完成数据通信功能和日志记录功能;ThreadStart函数是创建线程的函数,用于创建线程,t为方法指针,p为参数指针。
值得注意的的是RTKLIB中,不同通信协议和模式的通信路径path参数的格式具有特定的要求,具体内容可参考stropen函数的注释,如下所示。
- /* open stream -----------------------------------------------------------------
- *
- * open stream to read or write data from or to virtual devices.
- *
- * args : stream_t *stream IO stream
- * int type I stream type
- * STR_SERIAL = serial device
- * STR_FILE = file (record and playback)
- * STR_TCPSVR = TCP server
- * STR_TCPCLI = TCP client
- * STR_NTRIPSVR = NTRIP server
- * STR_NTRIPCLI = NTRIP client
- * STR_NTRIPC_S = NTRIP caster server
- * STR_NTRIPC_C = NTRIP caster client
- * STR_UDPSVR = UDP server (read only)
- * STR_UDPCLI = UDP client (write only)
- * STR_MEMBUF = memory buffer (FIFO)
- * STR_FTP = download by FTP (raed only)
- * STR_HTTP = download by HTTP (raed only)
- * int mode I stream mode (STR_MODE_???)
- * STR_MODE_R = read only
- * STR_MODE_W = write only
- * STR_MODE_RW = read and write
- * char *path I stream path (see below)
- *
- * return : status (0:error,1:ok)
- *
- * notes : see reference [1] for NTRIP
- * STR_FTP/HTTP needs "wget" in command search paths
- *
- * stream path ([] options):
- *
- * STR_SERIAL port[:brate[:bsize[:parity[:stopb[:fctr[#port]]]]]]
- * port = COM?? (windows)
- * tty??? (linuex, omit /dev/)
- * brate = bit rate (bps)
- * bsize = bit size (7|8)
- * parity= parity (n|o|e)
- * stopb = stop bits (1|2)
- * fctr = flow control (off|rts)
- * port = tcp server port to output received stream
- *
- * STR_FILE path[::T][::+start][::xseppd][::S=swap][::P={4|8}]
- * path = file path
- * (can include keywords defined by )
- * ::T = enable time tag
- * start = replay start offset (s)
- * speed = replay speed factor
- * swap = output swap interval (hr) (0: no swap)
- * ::P={4|8} = file pointer size (4:32bit,8:64bit)
- *
- * STR_TCPSVR :port
- * port = TCP server port to accept
- *
- * STR_TCPCLI addr:port
- * addr = TCP server address to connect
- * port = TCP server port to connect
- *
- * STR_NTRIPSVR [:passwd@]addr[:port]/mponit[:string]
- * addr = NTRIP caster address to connect
- * port = NTRIP caster server port to connect
- * passwd= NTRIP caster server password to connect
- * mpoint= NTRIP mountpoint
- * string= NTRIP server string
- *
- * STR_NTRIPCLI [user[:passwd]@]addr[:port]/mpoint
- * addr = NTRIP caster address to connect
- * port = NTRIP caster client port to connect
- * user = NTRIP caster client user to connect
- * passwd= NTRIP caster client password to connect
- * mpoint= NTRIP mountpoint
- *
- * STR_NTRIPC_S [:passwd@][:port]/mpoint
- * port = NTRIP caster server port to accept
- * passwd= NTRIP caster server password to accept
- * mpoint= NTRIP mountpoint
- *
- * STR_NTRIPC_C [user[:passwd]@][:port]/mpoint
- * port = NTRIP caster client port to accept
- * user = NTRIP caster client user to accept
- * passwd= NTRIP caster client password to accept
- * mpoint= NTRIP mountpoint
- *
- * STR_UDPSVR :port
- * port = UDP server port to receive
- *
- * STR_UDPCLI addr:port
- * addr = UDP server or broadcast address to send
- * port = UDP server or broadcast port to send
- *
- * STR_MEMBUF [size]
- * size = FIFO size (bytes) ("":4096)
- *
- * STR_FTP [user[:passwd]@]addr/path[::T=poff[,tint[,toff,tret]]]]
- * user = FTP server user
- * passwd= FTP server password
- * addr = FTP server address
- * path = FTP server file path
- * poff = time offset for path extension (s)
- * tint = download interval (s)
- * toff = download time offset (s)
- * tret = download retry interval (s) (0:no retry)
- *
- * STR_HTTP addr/path[::T=poff[,tint[,toff,tret]]]]
- * addr = HTTP server address
- * path = HTTP server file path
- * poff = time offset for path extension (s)
- * tint = download interval (s)
- * toff = download time offset (s)
- * tret = download retry interval (s) (0:no retry)
- *
- *-----------------------------------------------------------------------------*/
基于RTKLIB构建高并发通信测试工具的更多相关文章
- Microsoft Orleans构建高并发、分布式的大型应用程序框架
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- nginx+lua+redis构建高并发应用(转)
nginx+lua+redis构建高并发应用 ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求. url请求nginx服务器,然后lua查询redis, ...
- 基于SOA的高并发和高可用分布式系统架构和组件详解
基于SOA的分布式高可用架构和微服务架构,是时下如日中天的互联网企业级系统开发架构选择方案.在核心思想上,两者都主张对系统的横向细分和扩展,按不同的业务功能模块来对系统进行分割并且使用一定的手段实现服 ...
- 基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)
作者|刘浩杨 来源|尔达 Erda 公众号 本文整理自刘浩杨在 GopherChina 2021 北京站主会场的演讲,微信添加:Erda202106,联系小助手即可获取讲师 PPT. 前言 当今时 ...
- Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。
本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加 ...
- 使用ngx_lua构建高并发应用(1)
转自:http://blog.csdn.net/chosen0ne/article/details/7304192 一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apa ...
- tornado 采用 epoll 代理构建高并发网络模型
1 阻塞和非阻塞 对于阻塞和非阻塞,网上有一个很形象的比喻,就是说好比你在等快递,阻塞模式就是快递如果不到,你就不能做其他事情.非阻塞模式就是在这段时间里面,你可以做其他事情,比如上网.打游戏.睡觉 ...
- 个人项目开源之c++基于epoll实现高并发游戏盒子(服务端+客户端)源代码
正在陆续开源自己的一些项目 此为c++实现高并发的游戏盒子,平台问题需要迁移重构,所以有一些遗留问题,客户端异常断开没有处理,会导致服务器崩溃,还有基于快写代码编程平台实现的小程序切换,线程读写缓存没 ...
- 构建高并发&高可用&安全的IT系统-高并发部分
什么是高并发? 狭义来讲就是你的网站/软件同一时间能承受的用户数量有多少 相关指标有 并发数:对网站/软件同时发起的请求数,一般也可代表实际的用户 每秒响应时间:常指一次请求到系统正确响的时间(以秒为 ...
随机推荐
- 在Android上仿百度贴吧客户端Loading图标小球
封面 前言 使用百度贴吧客户端的时候发发现加载的小动画挺有意思的,于是自己动手写写看.想学习自定义View以及自定义动画的小伙伴一定不要错过哦. 读者朋友需要有最基本的canvas绘图功底,比如画笔P ...
- webpack配置这一篇就够
最近看了一篇好文,根据这个文章重新梳理了一遍webpack打包过程,以前的一些问题也都清楚了,在这里分享一下,同时自己也做了一些小的调整 原文链接:http://www.jianshu.com/p/4 ...
- MySQL索引实战经验总结
MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源,本篇总结了一些MySQL索引实战经验. 索引是用于快速查找记录的一种数据结构.索引就像是数据库中 ...
- JSP小记
0.配置servlet的模板 1.找Jar文件:\Common\plugins (myeclipse.ini文件中查看) * com.genuitec.eclipse.wizards*.jar 2.找 ...
- 团队作业9--beta版本测试报告及发布说明
Beta版本测试报告 1.bug的分类 a.修复的bug 部分用户无法获取位置 e. 这个bug的确应该修复,但是没有时间在这个版本修复,延迟到下一个版本修复. 前端无法查看用户签到信息 2.场景测试 ...
- 201521123031《java程序设计》第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句 ...
- 201521123038 《Java程序设计》 第三周学习总结
201521123038 <Java程序设计> 第三周学习总结 1. 本周学习总结 附大图链接 http://naotu.baidu.com/file/5774caa2be710afbc0 ...
- 201521123007《Java程序设计》第1周学习总结
1. 本周学习总结 了解了JAVA语言的发展历史及特点,还有JDK.JRE.JVM三者之间的关系,安装并设置JAVA开发平台,使用Notepad++和Eclipse编辑器编写JAVA程序并运行,学会使 ...
- PolarDB · 新品介绍 · 深入了解阿里云新一代产品 PolarDB
背景意义 云计算为如今的互联网时代提供了更多的计算能力,乃至创造能力,关系型数据库作为所有应用不可或缺的重要部件,开箱即用,高性价加比特性的云数据库深受开发者的喜爱.作为一线的开发和运维人员,在阿里云 ...
- Mybatis学习(三)XML配置文件之mybatis-config.xml
1.MyBatis的配置文件结构 1.1 properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的 Java 属性配置文件中,或者通过 properties 元素的子元素来传递. ...