這可能是一個非常基本的問題/設計,但我正在努力處理我要在此定義的系統的正確方法。使用Linux的TCP客戶端/服務器
我有一個系統與一個客戶端(PC),將通過TCP/IP協議連接到嵌入式Linux板(樹莓派)。這將是一個命令/響應系統,個人電腦會詢問一些事情,樹莓PI會迴應結果。
例如:
CMD =>讀取/返回ADC通道X
RSP => ADC通道X數據
對於這種類型的系統的我已經定義的分組協議,它允許此相互作用。我的問題是如何在Raspberry PI上處理這個問題。我想有一個單線程處理TCP連接;將接收數據放入線程安全隊列並從線程安全隊列中拉出輸出數據。然後主線程會週期性地輪詢隊列以查找數據。當數據被發現時,該命令將被處理並且將生成響應。所有命令都有響應。
主線程還將執行其他時間關鍵任務(PID控制迴路),因此它不能等待傳入或傳出數據。
我的猜測是這種類型的系統是相當普遍的,並且可能有一個很好的方法來實現這種類型的系統。我對Linux編程非常陌生,但我一直在編程高度嵌入式系統(無操作系統)。只是爲了這種類型的設計而努力。
注意我選擇了TCP/IP,因爲它在失敗的情況下處理重定向。在我的例子中,每個命令都有一個響應,所以如果使得設計更簡單/更靈活,就可以使用UDP。
任何幫助,非常感謝。
也應該提到命令的數量和數據包的大小會有很大的不同。所以這個系統需要運行整個應用程序運行的時間。有可能並不總是有一個客戶端連接。 –
無論如何,關鍵線程是否擁有這些數據?還是必須得到/計算它以對請求做出反應?如果數據已經可用,那麼處理客戶端的線程可以執行簡單的讀取/處理/寫入循環,而不需要隊列。 「進程」部分只會訪問某些線程安全存儲的數據。 –
現在的問題有點寬泛。如果你嘗試了,你會得到更高質量的答案,並寫一篇關於你爲什麼不滿意的文章。 – jxh