Синхронизация данных передаваемых netcat
От: Skorodum Россия  
Дата: 01.11.23 14:56
Оценка:
Есть взаимодействие организованое по вот такой схеме на линуксе:

"Program A" -> named pipe -> "Program B"

"Program A" записывает буфер проивзольного размеры который начинается с размера данных (flatbuffer). Разделителей или контрольной суммы нет, но все работает отлично при взаимодействии через именованные каналы, т.к. если никто не читает, то в named pipe ничего и не пишется, явной синхронизации не требуется.

В тестовых целях необходимо получать эти же данные на другой машине. Сделал вот так:

"Program A" -> named pipe -> netcat -> TCP/IP -> netcat -> named pipe -> "Program B"

Данные доезжают, но проблема в том, что они теперь никак не синхронизированны и начало буфера не поймать. Есть ли какая-то netcat/socat магия для синхронизации клиента и сервера? Или нужно что-то типа ZeroMQ?
netcat named pipe linux
Re: Синхронизация данных передаваемых netcat
От: kov_serg Россия  
Дата: 01.11.23 17:53
Оценка:
Здравствуйте, Skorodum, Вы писали:

S>Данные доезжают, но проблема в том, что они теперь никак не синхронизированны и начало буфера не поймать. Есть ли какая-то netcat/socat магия для синхронизации клиента и сервера? Или нужно что-то типа ZeroMQ?


А зачем named pipe ?
почему не просто "ProgramA | nc" и "nc | ProgramB"
И вам никто не мешает стартовать "ProgramA | nc" через ssh удалённо или перезапускать если надо.
  Можно еще интерактива добавить
#!/bin/sh

SESSION="test"

tmux kill-session -t $SESSION
tmux new-session -d -s $SESSION
tmux split-window -v -t $SESSION
tmux split-window -h -t $SESSION:0.0
tmux split-window -h -t $SESSION:0.2
tmux send-keys -t $SESSION:0.0 'ssh worker1' C-m
tmux send-keys -t $SESSION:0.1 'ssh worker2' C-m
tmux send-keys -t $SESSION:0.2 'ssh worker3' C-m
tmux send-keys -t $SESSION:0.3 'tmux kill-session -t ' $SESSION
tmux attach-session -t $SESSION
Re[2]: Синхронизация данных передаваемых netcat
От: Skorodum Россия  
Дата: 06.11.23 13:37
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>А зачем named pipe ?

_>почему не просто "ProgramA | nc" и "nc | ProgramB"

"Program A" записывает буфер проивзольного размеры который начинается с размера данных (flatbuffer). Разделителей или контрольной суммы нет, но все работает отлично при взаимодействии через именованные каналы, т.к. если никто не читает, то в named pipe ничего и не пишется, явной синхронизации не требуется.

Со стандартным выводом это не будет работаеть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.