FIFO는 판독기와 기록기 모두 열어야 하기 때문에 사용상 문제가 있습니다. 하나가 늦으면 다른 하나는 운영 체제 내에서 차단됩니다.
게시 메커니즘을 구현해야 합니다. 프로그램은 로그를 게시하고 누군가가 듣기에 "관심"하면(예: 게시 채널을 열면) 메시지를 받게 됩니다. 아무도 "관심"하지 않으면 메시지가 사라질 것입니다. 문제 없습니다. 하나 이상의 리스너를 지원하지 않습니다. 문제 없습니다. 무엇을 사용할 수 있나요?
답변1
UDP를 브로드캐스트할 수 있습니다. 이것은보내는 사람섹션에 무엇이든 파이프하세요.
socat - UDP-DATAGRAM:127.255.255.255:50011,sourceport=50022,broadcast
수화기이 기능을 사용하면 언제든지 파티에 참가하거나 파티에서 나갈 수 있습니다.
socat - UDP-LISTEN:50011,bind=127.255.255.255,sourceport=50022,reuseaddr
참고 및 설명:
- UDP는 패킷이 순서대로 도착한다고 보장하지 않습니다(참조:이것)
50011
50022
선택한 포트 번호입니다 .- 이 주소는
127.255.255.255
루프백 인터페이스를 통해 방송하는 발신자를 나타내며 원하는 경우 LAN 내에서 방송하도록 조정할 수 있습니다. - 다시 말하지만,
bind=127.255.255.255
다른 곳에서 오는(있는 경우) UDP 패킷에 대해 걱정할 필요가 없도록 수신기는 이 인터페이스로 제한되어야 합니다. - 고정하는 이유는 두 가지입니다
sourceport
.- 수신자는 다른(아마도 임의의) 소스 포트에서 동일한 주소와 포트로 방송하는 다른(악의적인?) 발신자를 "보지" 않습니다.
- 어떤 이유로 발신자가 종료된 후 이를 다시 시작할 수 있으며 발신자가 임의 소스 포트를 사용하는 경우 기존 수신자는 고정된 상태로 유지되므로 일반적으로 새 전송 측을 "볼" 수 없습니다. 이전 소스 포트로 이동합니다.
reuseaddr
여러 수신기가 공존할 수 있습니다.reuseaddr
기술적으로 여러 발신자를 실행할 수 있는 발신자 섹션에 추가할 수 있습니다 . 이로 인해 수신 측에서 인터리브된 출력이 발생할 수 있으므로 권장되지 않습니다.- 실행 중인 발신자는 정확히 동일한 주소와 포트 튜플을 사용하여 다른 (악성?) 발신자를 차단합니다. 그러나 발송인이 종료되면 다른 발송인이 대신할 수 있습니다. 루트 액세스 권한이 있는 경우
sourceport
아래에서 선택할 수 있습니다1024
. 대부분의 운영 체제에서는 일반 사용자가 이러한 포트("권한 있는 포트"라고 함)에 바인딩하는 것을 허용하지 않으므로 보낸 사람이 죽은 경우에도 사용자를 가장할 수 없습니다. 그러나 일반 사용자가 실행하는 수신기는 권한 있는 포트를 으로 사용할 수 있습니다sourceport
. 루트만 수신할 수 있도록 하려면 다른 포트(50011
예제에서는)를 권한 있는 포트로 변경하세요.