Используя bash, мы можем получить что-то вроде этого с помощью netcat:
nc -lk -U /my/fifo | while read line; do
# line => {"client_id":123}
done;
клиенты отправляют данные следующим образом:
echo '{"client_id":123,"data":"foo"}' | nc -U /my/fifo
и клиенты ждут такие данные:
echo '{"client_id":123}' | nc -U /my/fifo | while read line; do
done;
мой вопрос - как я могу отправлять данные от одного клиента другому клиенту, не вовлекая всех клиентов? На "сервере" мне нужно будет хранить ссылку на каждого клиента, чтобы, когда я получаю сообщение от одного клиента, я знал, кому переслать сообщение? Как я могу хранить ссылку на клиентов, которые в данный момент подключены? Так же, как и в веб-сокетах, я хочу создавать каналы, где любой зарегистрированный на этом канале получит сообщение.
решение1
Так вот в чем дело. Думаю, я могу ответить клиентам:
echo "this is the response" | nc -lk -U /my/fifo
но вся суть в том, как мне реагировать по-разному в зависимости от того, кто клиент? Я имею в виду, как можно создать что-то очень полезное, если нет логики, основанной на запросе клиента и т. д.?
Я предполагаю только, что будет два сервера:
nc -lk -U /my/fifo1 | while read line; do
# custom logic goes here
done > nc -lk -U /my/fifo2
Итак, клиенты подключаются к:
echo '{"client_id":123}' | nc -U /my/fifo1
nc -U /my/fifo2 | while read line; do
done;
это выдает то, что я знаю о том, как работают сокеты доменов TCP и Unix с Node.js и т. д., но полагаю, что с bash мы должны делать это именно так?
Я также думаю, что для избежания состояния гонки, возможно, придется каким-то образом поместить две вышеуказанные команды в один конвейер.