一个物联网的项目准备使用workerman,有部分不了解,请教

huboy

手上有个物联网的项目,应用场景如下:全国各地部署了很多计量表具(GPRS上传数据),现在需要制作一套管理系统,实现对这些表具的管理,核心部分有这些要求

1 制作一个展示及管理界面 (以下简称A) (这个没有问题,也与Workerman无关)
2 计划采用Workerman TCP 长连接模式来管理这些 GPRS客户端(以下简称B)

现在有些没弄明白的地方
1 每次服务器启动是否都需要命令行启动Workerman编写的后台程序 B
2 后台程序 B 是否可以使用一套我自己封装过的MYSQL类,便于操作MYSQL
3 前台程序A 与 后台程序 B 之间的通讯(比如向指定设备发送消息,这个前面有人问到,但是有个问题没看明白,因为每个TCP链接是有UID的,A如何实时获取这个UID)
4 后台程序 B 是否支持对每个TCP链接定时发送数据
5 后台程序B 与GPRS之间的通讯均为一段或长或段的十六进制数据(没有特定的开始或结束标志),这个是不是直接采用标准的TCP协议就可以

5773 3 1
3个回答

huboy

又看了下文档,TCP链接的UID是自定义的,也就是说我自己定义,这样一来,我只需要在A中 调用 sendMessageByUid ,并直接使用我自定义的UID就可以了。

其实也就是这个UID我事先都已经定好了,哪个设备的GPRS链接,我就直接赋值,同样,我需要往哪个设备发消息,那我也使用这个UID就好了

不知道以上理解是否正确???

walkor

1 每次服务器启动是否都需要命令行启动Workerman编写的后台程序 B

是的

2 后台程序 B 是否可以使用一套我自己封装过的MYSQL类,便于操作MYSQL

可以。
但是需要注意如果mysql链接长时间没有通讯,mysql链接会被mysql服务端断开,客户端再次使用这个链接时会报mysql gone away错误。
解决方法大致两种:
1、使用短链接,每个请求处理完毕关闭数据库链接。2、判断下错误码,出现错误重连一次mysql

3 前台程序A 与 后台程序 B 之间的通讯(比如向指定设备发送消息,这个前面有人问到,但是有个问题没看明白,因为每个TCP链接是有UID的,A如何实时获取这个UID)

uid是自定义的,可以理解为你设备的全局唯一的名称或者id

4 后台程序 B 是否支持对每个TCP链接定时发送数据

支持,这是基本的功能。

5 后台程序B 与GPRS之间的通讯均为一段或长或段的十六进制数据(没有特定的开始或结束标志),这个是不是直接采用标准的TCP协议就可以

最好有个分辨包大小的标志,tcp有粘包的特性,数据如果连在一起可能无法分辨。有时候会出现数据还没接收完全就被处理的情况

  • 暂无评论
huboy

非常感谢,最大的担心已经没有了。

已经决定使用workerman来做了。

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