요청 개체에 해당 응답 개체가 있습니다. Sender 객체는 요청을 한 다음 응답을 수신합니다. 하나의 보낸 사람/수신기 개체가 다른 요청을 보낼 수 있습니다. 모든 요청은 전역 대기열에 저장되고 처리 된 후 해당 응답이 모든 수신기 객체에 전송됩니다.요청 - 응답 시스템
답변
문제의 해결책은 여러 가지가 있습니다. 하나는 트랜시버가 모든 Request
객체에 파괴 사실을 알리는 것입니다. 이를 위해 Request
개체가 자신을 등록하는 데 사용하는 Transceiver::addRequest()
과 같은 메서드가 필요합니다. Transceiver
의 소멸자에서 당신은 Request
의 모든 등록을 통보해야합니다. 예를 들어 :
class Transceiver
{
virtual ~Transceiver()
{
for (auto request : m_requests)
request->deleteTransceiver(this);
}
void addRequest(Request* r)
{
m_requests.push_back(r);
}
void removeRequest(Request* r)
{
m_requests.erase(std::remove(m_requests.begin(), m_requests.end(), r),
m_requests.end());
}
std::vector<Request*> m_requests;
};
class Request
{
virtual void deleteTransceiver(Transceiver* t) = 0;
virtual void notify() = 0;
};
class RequestImpl : public Request
{
RequestImpl(Transceiver* t)
: m_target(t)
{
if (t)
t->addRequest(this);
}
~RequestImpl()
{
if (m_target)
m_target->removeRequest(this);
}
virtual void deleteTransceiver(Transceiver* t)
{
if (m_target == t)
m_target = 0;
}
virtual void notify()
{
if (m_target)
m_target->process(ResponseType());
}
Transceiver* m_target;
};
두 번째 접근 방법은 물론 그것을 사용하고 같은 Transceiver
만큼의 파괴를 방지하는 것입니다. Request
클래스에 std::shared_ptr<Transceiver> m_target
을 사용할 수 있습니다. 즉, 송수신기가 적어도 관련 요청만큼 오래 지속됩니다.
유연성을 좀 더 높이려면 std::weak_ptr<Transceiver>
가능성도 있습니다. 그러면 트랜시버는 요청이 아직 살아있을 때 파괴 될 수 있습니다. 그러나 std::weak_ptr<Transceiver>::lock()
을 시도 할 때 이 실패하면 Transceiver
이 (가) 죽었다는 것을 알게됩니다.
편집 :은 그것의 Transceiver
전에 파괴되는 경우 Request
을 제거하는 방법을 추가했습니다.
글쎄, 그건 쉽지. 감사! – catscradle
- 1. 요청 - 응답 패턴 용 JMS
- 2. 시스템 응답 시간 계산
- 3. 메시징 시스템 MYSQL, 응답
- 4. Chrome의 요청/응답 표시
- 5. mvp 세션 응답 요청
- 6. JQuery AJAX 요청/응답
- 7. 요청 - 응답 로직
- 8. HTTP 요청 응답 디버깅
- 9. 요청 응답 설계 구현
- 10. 응답 후 즉각적인 요청
- 11. 요청 및 응답 속도
- 12. http 요청 부분 응답
- 13. WSDL이없는 비누 요청/응답
- 14. activemq 요청 응답 - 항상 이중 응답 전송
- 15. node.js 응답 하나의 html 요청
- 16. HTTP 요청 및 응답 처리
- 17. Grails의 JMS 요청/응답 패턴
- 18. WCF 요청/응답 패키지 크기
- 19. WCF의 요청 및 응답 유형
- 20. ActiveMQ 요청 - 응답 타임 아웃
- 21. 복수 요청 단일 응답 동기화
- 22. 하나의 아약스 요청, 여러 응답?
- 23. 응답 전에 파이썬 urllib2 요청
- 24. 웹 서비스 : 요청 - 응답 매퍼
- 25. MVC4 WebApi의 요청/응답 암호화
- 26. CREST 로그 요청/응답 본문
- 27. .net에서 요청 - 응답 패턴을 구현하십시오.
- 28. Java 서비스에서 로깅 요청 - 응답
- 29. javax.servlet.filter 클래스의 요청/응답 처리
- 30. MTOM 요청/비 MTOM 응답
포인터가 공유되었거나 약합니까? –