서로 통신해야하는 여러 클라이언트가있는 TCP 기반 Netty 응용 프로그램이 있습니다. ChannelGroup에 모든 채널 참조를 저장합니다.TCP Netty ChannelGroup에있는 하나를 제외한 모든 것에 쓰기
내가 ChannelGroup.write를 호출하여 ChannelGroup의 모든 클라이언트를 기록 할 수 있지만 어떤 것은 예를 들어 이러한 채널 중 하나를 제외하고 모두 쓸 수있는 효율적인 방법이 될 것이라고 알고 있지만 :
'A' , 'B', 'C'는 채널 그룹에 함께 있고 'A'는 'B'와 'C'로 보내야하며, 'B'는 'A'와 'C'등으로 보내야합니다. 이 일을하는 가장 좋은 방법은? 여기에 내가 생각 몇 가지 옵션이 있지만 몇 가지 의견을 주시면 감사하겠습니다 :
반복적으로
그냥 그룹을 통해 반복하고 (이 경우 ChannelGroup.write를 사용하지 않는) 개별적으로 채널에 쓰기 "remake/clone"채널 그룹에 쓰기 전용 채널이 포함되도록하십시오. 그런 다음 수정 된 그룹에서 ChannelGroup.write를 호출 한 다음 그룹을 전체 그룹으로 복원합니다.
모든 채널에 쓰지 만 폐기 할 채널 (인코딩 또는 다운 스트림 처리기)을 처리하고 제외 된 채널에서 온 것 인 경우 메시지를 쓰지 않는 일부 처리기 논리를 구현합니다. 설계 트레이드 오프에 관한 한
같이까지 메시지를 최대한 빠르게 전송된다 ChannelGroups가 < 20 채널 메시지 크기 1킬로바이트 대해 비교적 작은 각 (500 바이트 - 2킬로바이트). 또한, 여러 논리 회로가 localhost 피드백에 대해 더 잘 작동하면이 연결에 대한 많은 연결이 서버와 동일한 호스트에있는 시나리오가 있습니다.이 연결에 대한 피드백은 크게 감사 할 것입니다.
도움을 주셔서 감사합니다.
나는 옵션 3의 행을 따라 아마 할 것입니다. 진정으로 채널이 스스로 쓰기를 원하지 않는다면, 채널 (또는 처리기?) 내에 논리를 갖는 것이 합리적입니다. 그 자체. 이렇게하면 메시지 자체를 원한다면 걱정할 채널에 달려 있습니다. 이 작업을 수행함에있어 다른 의미가있을 수 있지만 그렇지 않은 경우에는 깨끗해 보입니다. – Jeremy