2 java280580332 java280580332 于 2016.09.15 11:16 提问

欢迎进来讨论,,,一起进步

设备通信存在以下特性:
1、单线程,同时只支持一个socket通信
2、采用一问一答(连续发送的指令时,需要前一条指令响应回来,才能发第二条),有一种特殊情况设备随时从udp通道会给我发来告警的信息,如设备上一些异常操作,这个不需要发送指令的
3、现在与设备通信指令有四十种左右,可以理解成api,只不过是异步的
4、每个指令的格式大体相同 ,请求的数据体有区别,响应也是一样。针对不同的响应我们实现了不同的响应处理类。主要是对响应的十六进制的数据进行解析成我们认识的java封装的对象。

下面是楼主面临的问题:
场景:通过各种指令的组合,去完成一个业务工单,比如拆纤的业务工单,在页面发起一个拆纤动作,设备上会以慢闪提示(发了两条慢闪的指令),然后现场操作人员会将慢闪的端口的纤拔了,此时那个端口会有拔出的告警。根据告警会再次发送
灭灯指令,当需要拔的端口都操作完了,这个拆纤业务也就结束了。

楼主的方案:
第一阶段:整个方案没有第三方框架的介入,所有逻辑是自己设计的。首先发送指令和接收指令的核心代码用数据库表设计的队列,启动收发两个线程,发送线程每50毫秒去扫描发送队列表,有数据就进行发送。收线程不停接收,将接收的数据拼成一个完整的响应后分发给不同响应的处理类。

第一阶段的问题很多,主要有:
1、首先用数据库实现队列,50ms去扫描,增加数据库的压力,同时效率不能满足
2、发送和接收核心代码实现了很好封装,但是响应处理类跟业务耦合性太高,而且响应处理类需要根据不同的业务类型做不同的业务,也就是响应处理类后期代码分之会非常多,不便维护

第二阶段:重新选择了方案:用redis内存数据库代替了db数据库,同时引入了activiti流程的概念,收发核心代码跟方案一类似,lz很快实现了。但是activiti是我另一个同事在研究(我们项目大都是一到两年工作经验,lz三年了算是最老了,但是技术还是菜),本来打算用流程来解决不同的工单,但是在尝试过程中结合到实际的业务还是不能很好的满足。而且把流程搞得变味了,工单业务也复杂多了

小弟在这里先谢谢大家,能耐心的看完我对目前工作的理解。有些地方描述的不好,各位多多包涵,希望大神们指导一下,给出一些建议或者技术选型。再次谢谢
更多 0

1个回答

zqbnqsdsmd
zqbnqsdsmd   2016.11.14 23:34
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#图书馆管理系统
大学期间自己编写的代码,存在不合理与未完善的地方,欢迎大家一起讨论,进步
一起学习,一起进步
开源我们正在打开一扇窗户,在这里我可以看到别人每天都在进步,来提醒自己不要原地踏步。
中科院物理所固体物理考博试题
中科院物理所固体物理 欢迎下载 一起学习 一起进步
openCV学习教程
欢迎学习openCV的下载使用,一起进步
C#程序作业
C#程序作业,欢迎大家进来一起思考和探讨
客户管理系统+源码
客户管理系统+源码,欢迎一起学习进步
实际工作中的测试用例
这是真实工作中所写的测试用例,希望和大家一起讨论进步
一周的总结—只有意识的自己的差距才能进步
由于上一个周总结没有写,在这里补充一下吧,这个周主要是在简保组做外协,主要的任务是检查检证物,这是一个很繁重的活,由于这个项目在测试期间工作没有落实好,以至于现在返工。这也给我了一个警告,以后再做类似问题时应该更加的认真,不要放过一点瑕疵, 还有就是我对管理的一些感悟,如何能做到更有效地品质保证。       这一周主要的工作是项目的前期的准备,也是进入公司对自己挑战最大的一个周,好长时间没有
Jenkins搭建
jenkins搭建,简单描述,一看就会,欢迎观看,欢迎指出不足一起学习一起进步
词汇的解释欢迎一起讨论
程序:对人类处理事件的过程的抽象。 编程语言:对计算机的元功能描述和规范,不同语言就是对相同的元计算机功能的不同组织、封装,最大的区别是:级别越高封装越厉害某一方面越简单易用但相对功能受牵制。 编译器:使人类语言符号和cpu实际的操作数据和操作方法机械的对应起来的工具。 二进制:符合cpu工作方式的操作数据或操作方法。 计算机:对现实世界事件运转的抽象模拟并且按照可添加功能的框架形式设计。