网络编程一个大致框架请教?

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

服务端和自助终端的大致架构是 网络监听接收线程和网络发送线程,分别对应接收队列和发送队列缓冲,
数据分析线程消费接收队列的内容,并产生一些工作任务至工作任务队列。工作线程依次从工作任务队列中取出
各工作任务,进行相关的工作,可能会产生相关的反馈结果至网络发送队列。
1 第一个疑惑是,在具体的业务工作请求中,例如终端向服务器发出一请求的socket通信业务帧,具体实现是向发送队列插入一个帧数据, 发送线程再取出再发送,在这样子的一个机制下,当网络socket通信(不一定是硬件)有问题的时候,有啥好的方法把该错误信息反馈至终端用户?以及如何进行一些保护,具有一定的容错和自恢复性?

2 第二个疑惑是: 服务器有一些工作是控制一些下位机硬件,发出一些控制命令后,是需要一定时间后才知道执行结果的, 再需要把执行结果返回给相关的自助终端。这些工作均是在工作线程中完成,请问对此种情况有没有一些成熟稳定的模式或者思路,谢谢!

非常欢迎各位高手讨论,发表各自的思路高见,如有经验介绍则更佳,谢谢了!
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kacy16 2013-08-20
  • 打赏
  • 举报
回复
自己再顶一下,请各路高手发表高见,谢谢!
kacy16 2013-08-19
  • 打赏
  • 举报
回复
引用 2 楼 yang79tao 的回复:
用st_asio_wrapper,看我的博客
yang79tao, 谢谢你的建议,看完你的博客后再向您请教,谢谢!
长尾巴的悟空 2013-08-19
  • 打赏
  • 举报
回复
这就看用什么样的解决方案了~
kacy16 2013-08-19
  • 打赏
  • 举报
回复
引用 3 楼 woshinia 的回复:
1,当网络socket通信(不一定是硬件)有问题的时候,通信双方调用send和recv是会出错,所以终端可以自行检测。解决方式就是重连,然后向服务器发送一个恢复命令,服务收到后给出刚才业务的进行的进度,从这个进度开始继续做,直到完成。或者可以像断点续传那样,终端自行记录进度。如果是业务操作发生错误,就返回一个错误码就行。 2,耗时的操作要另外开线程去做。如果耗时的操作很频繁的话,就建一个队列,收到命令就插入队列。然后另一个线程从队列里一个一个取出来做。
谢谢woshinia的指点,我目前采用的技术是udp协议加回答帧确认来进行通信, send recv等数据收发的函数的返回值确实有判断处理, 由于我目前的架构是使用 一发送线程专门负责发送数据帧,只是从发送队列中取数据, 并通过socket发送数据,一接收线程专门负责接收数据帧,不 我的疑惑是: 如果这个检查到send recv等函数返回值有问题,如何把该结果反馈至业务层,说明该业务数据帧没有发送成功。
woshinia 2013-08-16
  • 打赏
  • 举报
回复
1,当网络socket通信(不一定是硬件)有问题的时候,通信双方调用send和recv是会出错,所以终端可以自行检测。解决方式就是重连,然后向服务器发送一个恢复命令,服务收到后给出刚才业务的进行的进度,从这个进度开始继续做,直到完成。或者可以像断点续传那样,终端自行记录进度。如果是业务操作发生错误,就返回一个错误码就行。 2,耗时的操作要另外开线程去做。如果耗时的操作很频繁的话,就建一个队列,收到命令就插入队列。然后另一个线程从队列里一个一个取出来做。
youngwolf 2013-08-16
  • 打赏
  • 举报
回复
用st_asio_wrapper,看我的博客
kacy16 2013-08-16
  • 打赏
  • 举报
回复
自己顶一下,欢迎各位高手讨论,谢谢!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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