手上有个物联网的项目,应用场景如下:全国各地部署了很多计量表具(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协议就可以
又看了下文档,TCP链接的UID是自定义的,也就是说我自己定义,这样一来,我只需要在A中 调用 sendMessageByUid ,并直接使用我自定义的UID就可以了。
其实也就是这个UID我事先都已经定好了,哪个设备的GPRS链接,我就直接赋值,同样,我需要往哪个设备发消息,那我也使用这个UID就好了
不知道以上理解是否正确???
我就是这样做的 已经在运行中了
对
是的
可以。
但是需要注意如果mysql链接长时间没有通讯,mysql链接会被mysql服务端断开,客户端再次使用这个链接时会报mysql gone away错误。
解决方法大致两种:
1、使用短链接,每个请求处理完毕关闭数据库链接。2、判断下错误码,出现错误重连一次mysql
uid是自定义的,可以理解为你设备的全局唯一的名称或者id
支持,这是基本的功能。
最好有个分辨包大小的标志,tcp有粘包的特性,数据如果连在一起可能无法分辨。有时候会出现数据还没接收完全就被处理的情况
非常感谢,最大的担心已经没有了。
已经决定使用workerman来做了。