关于协议的一点疑问

defeatlr

1.硬件客户端是TCP/IP协议上报数据,在测试时服务端用text协议的时候,用TCP模拟工具请求时,我在onMessage回调中打印数据没有反应,换成裸tcp协议就可以,不用工具用telnet又可以打印出发送的数据

如果硬件接口数据是如下格式
send 200,123456789,00001,AA000000,0005,00,0818031611,,,,0000,\r\n我是否可以直接使用TEXT协议,在服务端接收数据时根据分割符处理好数据即可
3.假设我有3000个设备同时连接,每个设备每秒会上报100条数据,我是否需要在服务端建立异步任务比如存入redis去处理这些上报的数据,然后另外一个任务去处理redis数据入MYSQL
刚接触硬件通讯这块,比较小白,希望老大解答,感谢

2073 2 0
2个回答

walkor

1、text协议要求每个包结尾是一个换行符,没有换行符text协议认为消息没收全,就不会触发onMessage

2、可以直接用text协议。但是注意text协议里是以换行符\n为结束,\n是换行符,一个字符,而不是\和n两个字符

3、不清楚你的是什么场景,每个设备每秒要上报100条这么多数据。3000个设备那就是每秒30万个请求。
30万个请求都要操作数据库或者redis 数据库和redis是扛不住的,数据库你要想办法主从+分库分表,redis要想办法运行个集群去处理。workerman这边也需要用多台服务器。可以弄个rabbitmq队列慢慢去写数据库和redis。

  • 暂无评论
defeatlr

谢谢解答,问题我在补充说明下
1.第一点我用TCP模拟工具发送的数据就
send 200,123456789,00001,AA000000,0005,00,0818031611,,,,0000,\r\n 这样直接提交到服务器的,理论上text协议是\n结束应该触发onMessage回调的吧,测试中没有触发,这个估计是我自己的问题稍后换工具在测试下
2.第三点实际场景中应该没有这么大多数据,我只是随口打了个比方^-^,主要是想问下这个思路是不是可行?意思就是用2个异步任务服务 分别去处理数据到redis和redis数据到mysql这样

  • 暂无评论
年代过于久远,无法发表回答
🔝