簡體   English   中英

Ubuntu:Pipe 原始無緩沖數據到 TCP 端口

[英]Ubuntu: Pipe raw unbuffered data to TCP port

我的總體目標:我有一個硬件設備,可以將傳感器數據流式傳輸到運行 Python 腳本的 Ubuntu 筆記本電腦。 數據每 2 秒以 240 個樣本塊(每行一個,帶有 \n)的形式出現,並打印到標准輸出。 I start the Python script on the Ubuntu laptop and pipe its output to a TCP port using netcat. 我從網絡上的任何其他設備連接到 TCP 端口並獲取實時數據 stream -無需先加載所有先前的樣本

我的設置:兩台筆記本電腦。

1:Ubuntu 從傳感器收集讀數,並將這些讀數通過管道傳輸到 TCP 端口 1234。(這是有效的。) $ py read_sensors.py | nc -lk 1234 $ py read_sensors.py | nc -lk 1234

2:Windows 10,具有 WSL、Python 以及用於處理從第一台筆記本電腦流式傳輸的數據的現有腳本。 (這在 WSL 中工作) $ nc 10.10.10.01 1234

我的問題:我開始在 Ubuntu 筆記本電腦上傳輸傳感器數據。 10 分鍾后,我從我的 windows 筆記本電腦連接到 stream ......

我希望在建立連接時收到最新的樣本,以及(偽)實時的所有后續樣本。

相反,一旦我連接上,我就會被從 Ubuntu 筆記本電腦上開始流式傳輸管道以來收集的所有樣本淹沒,一旦它趕上,我就開始看到實時數據。

我試過了:搜索讓我嘗試了stdbuf。 缺乏結果導致我嘗試了$ stdbuf -oL py read_sensors.py | nc -lk 1234的各種組合。 $ stdbuf -oL py read_sensors.py | nc -lk 1234 $ py read_sensors.py | stdbuf -oL nc -lk 1234 $ py read_sensors.py | stdbuf -oL nc -lk 1234但每次我稍等片刻,然后從我的 windows 筆記本電腦連接到端口,它就會加載從我開始在 Ubuntu 筆記本電腦上流式傳輸時開始的所有樣本。

我假設:這是一個緩沖問題,必須在 Ubuntu 機器上修復 - 但 stdbuf 的各種組合對系統的行為沒有任何影響。 所以,我轉向 SO 神尋求洞察力和恩典:)

-缺口

這樣的事情可能會達到總體目標。 基於https://docs.python.org/3/library/socketserver.html#socketserver-tcpserver-example

import socketserver

class MyHandler(socketserver.BaseRequestHandler):
    def handle(self):
        bytes = read_sensor_data() # call the code that reads the sensors                                
        self.request.sendall(bytes)

if __name__ == "__main__":
    with socketserver.TCPServer(("localhost", 1234), MyHandler) as server:
        server.serve_forever()

禁用 netcat 緩沖:

強制 netcat 立即發送消息(不緩沖)

或者,我相信如果您使用 bash 內置的 tcp 連接繞過 netcat,它將起作用。 例如 read_sensors.py > /dev/tcp/10.10.10.1/1234

編輯:添加了顯示如何發送和接收的示例代碼。

示例代碼:

發送:

#!/bin/bash
while true
do
   date  > /dev/tcp/localhost/1234 || true # replace date command with read_sensors.py
   sleep 1
done

受到:

ubuntu@ubuntu:~$ nc -lk 1234

Output:

Tue Mar  2 20:40:24 UTC 2021
Tue Mar  2 20:40:25 UTC 2021
Tue Mar  2 20:40:26 UTC 2021
Tue Mar  2 20:40:27 UTC 2021
^C
ubuntu@ubuntu:~$ nc -lk 1234
Tue Mar  2 20:40:40 UTC 2021
Tue Mar  2 20:40:41 UTC 2021

當我點擊控制 C 時,請注意 13 秒的間隙,沒有數據發送或緩沖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM