这可能是一个非常基本的问题/设计,但我正在努力处理我要在此定义的系统的正确方法。使用Linux的TCP客户端/服务器
我有一个系统与一个客户端(PC),将通过TCP/IP协议连接到嵌入式Linux板(树莓派)。这将是一个命令/响应系统,个人电脑会询问一些事情,树莓PI会回应结果。
例如:
CMD =>读取/返回ADC通道X
RSP => ADC通道X数据
对于这种类型的系统的我已经定义的分组协议,它允许此相互作用。我的问题是如何在Raspberry PI上处理这个问题。我想有一个单线程处理TCP连接;将接收数据放入线程安全队列并从线程安全队列中拉出输出数据。然后主线程会周期性地轮询队列以查找数据。当数据被发现时,该命令将被处理并且将生成响应。所有命令都有响应。
主线程还将执行其他时间关键任务(PID控制回路),因此它不能等待传入或传出数据。
我的猜测是这种类型的系统是相当普遍的,并且可能有一个很好的方法来实现这种类型的系统。我对Linux编程非常陌生,但我一直在编程高度嵌入式系统(无操作系统)。只是为了这种类型的设计而努力。
注意我选择了TCP/IP,因为它在失败的情况下处理重定向。在我的例子中,每个命令都有一个响应,所以如果使得设计更简单/更灵活,就可以使用UDP。
任何帮助,非常感谢。
也应该提到命令的数量和数据包的大小会有很大的不同。所以这个系统需要运行整个应用程序运行的时间。有可能并不总是有一个客户端连接。 –
无论如何,关键线程是否拥有这些数据?还是必须得到/计算它以对请求做出反应?如果数据已经可用,那么处理客户端的线程可以执行简单的读取/处理/写入循环,而不需要队列。 “进程”部分只会访问某些线程安全存储的数据。 –
现在的问题有点宽泛。如果你尝试了,你会得到更高质量的答案,并写一篇关于你为什么不满意的文章。 – jxh