구현하는 방법이 있나요?게시/구독 패턴서버 프로세스를 사용하지 않고 명령줄에서? 이는 하나의 컴퓨터에서만 작동하면 됩니다.
서버 프로세스가 없어서 피하고 싶은 주요 사항은 이러한 도구를 사용하도록 시스템을 구성하는 것입니다. 또한 서버 프로세스가 중단될 가능성을 처리하지 않아도 되기를 바라고 있습니다.|
이는 다음과 같이 보일 수 있습니다:
# client 1
subscribe name | while read line; do echo $line; done
# client 2
subscribe name | while read line; do echo $line; done
# server
echo message | publish name
관련된 링크들
- POSIX IPC서버리스를 제공합니다메시지 대기열이를 위한 명령줄 클라이언트가 있습니다.(1) (2) (삼). 이는 위의 내용을 구현하기 위해 일종의 상태 저장소와 함께 사용될 수 있습니다.
- ZMQ제공합니다Pub/Sub 통신을 위한 프로토콜. 다음과 유사한 명령줄 도구가 있습니다.체크 안함사용을 위해ZMQ, 와 같은zmcat. 이는 최소한의 명령줄 게시/구독 패턴을 설정하는 데 사용될 수 있습니다.서버와 함께.
- Linux는 다음과 같은 또 다른 IPC 메커니즘을 제공합니다.명명된 파이프(cf mkfifo). 여러 소비자에 대한 의도된 동작이 무엇인지 모르겠습니다. 그러나 일부 초기 실험에서는 각 메시지가 단지소비자 중 한 사람으로부터 받은
답변1
모든 구독자는 다른 구독자에게 영향을 주지 않는 방식으로 새 데이터에 대한 알림을 받아야 하며 서버는 구독자가 받은 데이터를 추적할 필요가 없어야 합니다. 이로 인해 FIFO가 이 목적에 쓸모 없게 됩니다. 아이러니하게도 일반 파일의 파일 설명자가 파일 변경 사항을 추적하기 때문에 일반 파일은 원하는 작업을 정확하게 수행합니다. 이를 덮어쓰기와 결합하여 새로운 덮어쓰기가 발생하기 전에 모든 변경 사항이 게시되도록 할 수 있습니다. 즉, 하나의 메시지만 저장하게 됩니다.
touch pubsub
tail -f pubsub | while read line; do echo $line; done
tail -f pubsub | while read line; do echo $line; done
echo "message" | cat > pubsub
예상되는 동작인 표준 오류에서 "파일 잘림"이 발생하지만 이를 보고 싶지 않으면 2> /dev/null을 추가하세요.
tail은 실제로 읽기와 에코가 수행하는 모든 작업을 수행하지만 스크립트에 통합하기를 원한다고 가정하기 때문에 그렇게 작성됩니다.