클라이언트가 계속 반복하여 데이터를 확인하지 않고도 서버에서 클라이언트로 데이터를 지속적으로 보내고 싶습니다 (스트리밍). 나는 이것이 관찰자 디자인 패턴이라고 믿는 것이 옳다고 생각한다. 이것이 어떻게 가능한지?C++에서 옵저버 디자인 패턴 스트리밍 데이터를 구현하려면 어떻게해야합니까?
누군가 Google에서 할 수있는 것들의 목록을 제공 할 수 있습니까? 관찰자 패턴 aspect는 어떻게 구현됩니까?
감사
클라이언트가 계속 반복하여 데이터를 확인하지 않고도 서버에서 클라이언트로 데이터를 지속적으로 보내고 싶습니다 (스트리밍). 나는 이것이 관찰자 디자인 패턴이라고 믿는 것이 옳다고 생각한다. 이것이 어떻게 가능한지?C++에서 옵저버 디자인 패턴 스트리밍 데이터를 구현하려면 어떻게해야합니까?
누군가 Google에서 할 수있는 것들의 목록을 제공 할 수 있습니까? 관찰자 패턴 aspect는 어떻게 구현됩니까?
감사
관찰자 디자인 패턴이 약간 다른 무엇을 설명하고 각 관찰자는 "관찰"개체로 통보 가져옵니다
가참고; 그래서 당신은 지속적으로 데이터를 스트리밍하는 서버를 가지고 있다면, 서버가 당신에게 "통지"하고 서버가 당신에게 통지 할 것으로 예상 할 것이라고 기대합니까? 당신에게 보내는 모든 패킷? 모든 패킷 덩어리?
요컨대, 아니오, 클라이언트/서버 응용 프로그램에서 관찰자 패턴을 구현할 수 없습니다. 서버가 클라이언트 응용 프로그램에서 알림 메소드를 호출 할 수있는 방법이 없으며 클라이언트의 연결이 끊어지면 관찰 가능 객체에서 등록이 취소되지 않습니다.
귀하의 질문에 다시 ... 당신은 아키텍처에 의해 제한을받습니다. 블로킹 소켓 (tcp/udp)은 데이터를받을 때까지 블로킹하여 모두 작동합니다. 데이터를 받으면 반복적으로 더 많은 데이터를 얻기 위해 루프를 거쳐 다시 수신해야합니다.
비동기 소켓 통신은 아마도 관찰자 패턴에 가까워 질 것입니다. 또한 스트리밍 데이터가 있고 UDP가 스트리밍 데이터 용으로 특별히 설계 되었기 때문에 UDP 프로토콜을 사용하려고합니다. UDP를 신뢰할 수 없기 때문에 패킷을 놓치지 않으려면 reliable UDP을 사용할 수 있습니다.
통신 프로토콜이 완전히 다르기 때문에 클라이언트/서버 유스 케이스에 대한 관찰자 패턴을 구현할 수 없습니다. (RPC는 적합하지만 TCP를 사용하고 있습니다.)
어쨌든 할 수있는 것은 데이터 수신 전용 TCP 클라이언트가 있어야한다는 것입니다. 이 TCP 클라이언트이며 내부 클래스가 함께 Observer 패턴을 구현할 수 있습니다. 이것으로 클래스는 더 이상 데이터를 기다릴 필요가 없습니다.
내가 알고있는 것처럼 Shash
, 여기에 주요 관심사는 클라이언트 응용 프로그램이 서버에서 데이터를 기다리는 차단하지 않아야합니다. 이를 위해 소켓 이벤트에 작용할 하나의 스레드를 생성 할 수 있습니다. 이 스레드 모듈로 클래스 컨텍스트를 등록 할 수 있으며 데이터가 수신 될 때마다이 스레드 모듈은 등록 된 컨텍스트를 사용하여 콜백 (알림)을 할 수 있습니다.
[Boost.Signals2] (http://www.boost.org/doc/libs/1_47_0/doc/html/signals2.html)를 보았습니까? – Praetorian