自助服务系统的网络设计模型请教?

kacy16 2013-08-20 09:50:02
前在开发一个软件项目,是局域网络架构,一服务器加十多台自助终端,各自助终端向服务发出各业务请求,
服务器响应自助终端的请求。整套系统要求24X7的无故障运行,不需人工干预。

服务端和自助终端的大致架构是 网络监听接收线程和网络发送线程,分别对应接收队列和发送队列缓冲,
数据分析线程消费接收队列的内容,并产生一些工作任务至工作任务队列。工作线程依次从工作任务队列中取出
各工作任务,进行相关的工作,可能会产生相关的反馈结果至网络发送队列。

1 第一个疑惑是,在具体的业务工作请求中,例如终端向服务器发出一请求的socket通信业务帧,具体实现是向发送队列插入一个帧数据, 发送线程再取出再发送,
在这样子的一个机制下,当网络socket通信(不一定是硬件)有问题的时候,有啥好的方法把该错误信息反馈至终端用户?
目前采用的技术是udp协议加回答帧确认来进行通信,具体的socket数据收发的函数的返回值有判断处理,
由于我目前的架构是使用 一发送线程专门负责发送数据帧,只是从 发送队列中取数据,我的疑惑是: 如果在该发送线程中检查到socket函数返回值有问题,
如何把该结果反馈至业务层,说明该业务数据帧没有发送成功。以及如何进行一些保护,具有一定的容错和自恢复性?

2 第二个疑惑是: 服务器有一些工作是控制一些下位机硬件,发出一些控制命令后,是需要一定时间后才知道执行结果的, 再需要把执行结果返回给相关的自助终端。
往下位机发完控制指令后,可以立即返回。但是过一段时间后(约几十秒后)服务器需主动查询下位机的执行结果状态,并把该结果再返回给相对应的终端。关于此种情况,
这些工作均是在工作线程中完成,请问对此种情况有没有一些成熟稳定的模式或者思路,谢谢!

非常欢迎各位高手讨论,发表各自的思路高见,如有经验介绍则更佳,谢谢了!
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
木头菇 2013-08-21
  • 打赏
  • 举报
回复
引用 2 楼 kacy16 的回复:
[quote=引用 1 楼 spirit008 的回复:] 问题1.你回馈业务线程只是线程间通信问题,消息队列什么的你应该有框架吧。容错和自恢复一般做法就是检测到错误,关闭socket,n秒后重新尝试开启,循环往复。这个逻辑可由你的发送线程自行完成,也可由你的反馈,由业务线程来驱动完成。 问题2.没太明白你的问题在哪里,如果是耗时操作,那么就起线程,然后给网络线程发消息就好了。 一般的设计模式就是网络独立一个线程,轻型逻辑可在这个线程直接完成,重型逻辑会单独另外线程完成,然后靠消息队列和网络线程交互。 我写的一个程序,可以交流 http://download.csdn.net/detail/spirit008/5915985
谢谢spirit008兄的回复,谢谢! 第二个问题其实不是一个耗时的操作,当下就只是发送指令给一个硬件部件(单片机下位机系统),该硬件接收到该指令后会去做某些动作,大概耗时100秒左右(耗时是不固定的),难点是服务端怎么去获得单片机系统的执行结果?我的初步想法是成功发送指令给硬件部件后,再在任务队列中增加一个任务(大概60秒后执行)的,该任务主动去查询单片机系统的执行状态, 如成功查询到则发送结果给终端机,如不成功,则再在任务队列中增加一个20秒后执行查询单片机系统执行状态的任务.这样依旧循环,不知道是否可行?[/quote] 挺好的
kacy16 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 spirit008 的回复:
问题1.你回馈业务线程只是线程间通信问题,消息队列什么的你应该有框架吧。容错和自恢复一般做法就是检测到错误,关闭socket,n秒后重新尝试开启,循环往复。这个逻辑可由你的发送线程自行完成,也可由你的反馈,由业务线程来驱动完成。 问题2.没太明白你的问题在哪里,如果是耗时操作,那么就起线程,然后给网络线程发消息就好了。 一般的设计模式就是网络独立一个线程,轻型逻辑可在这个线程直接完成,重型逻辑会单独另外线程完成,然后靠消息队列和网络线程交互。 我写的一个程序,可以交流 http://download.csdn.net/detail/spirit008/5915985
谢谢spirit008兄的回复,谢谢! 第二个问题其实不是一个耗时的操作,当下就只是发送指令给一个硬件部件(单片机下位机系统),该硬件接收到该指令后会去做某些动作,大概耗时100秒左右(耗时是不固定的),难点是服务端怎么去获得单片机系统的执行结果?我的初步想法是成功发送指令给硬件部件后,再在任务队列中增加一个任务(大概60秒后执行)的,该任务主动去查询单片机系统的执行状态, 如成功查询到则发送结果给终端机,如不成功,则再在任务队列中增加一个20秒后执行查询单片机系统执行状态的任务.这样依旧循环,不知道是否可行?
木头菇 2013-08-21
  • 打赏
  • 举报
回复
问题1.你回馈业务线程只是线程间通信问题,消息队列什么的你应该有框架吧。容错和自恢复一般做法就是检测到错误,关闭socket,n秒后重新尝试开启,循环往复。这个逻辑可由你的发送线程自行完成,也可由你的反馈,由业务线程来驱动完成。 问题2.没太明白你的问题在哪里,如果是耗时操作,那么就起线程,然后给网络线程发消息就好了。 一般的设计模式就是网络独立一个线程,轻型逻辑可在这个线程直接完成,重型逻辑会单独另外线程完成,然后靠消息队列和网络线程交互。 我写的一个程序,可以交流 http://download.csdn.net/detail/spirit008/5915985
kacy16 2013-08-21
  • 打赏
  • 举报
回复
谢谢!欢迎大家继续发表各自的高见,谢谢!

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧