2011-01-27 4 views
3

시스템의 다른 구성 요소에 의해 응답되는 이벤트를 생성하여 시스템 요소가 통신하는 이벤트 구동 시스템을 설계하려고합니다. 구성 요소가 서로 독립적이거나 또는 독립적으로 구성 될 수 있도록 설계되었습니다. 이 시스템은 처음에는 Windows 7에서 구현되며 Delphi로 작성됩니다. 생성 된 이벤트는 Delphi 코드에 의해 생성됩니다. 단일 시스템에서 설명한 유형의 시스템을 구현하는 방법을 알고 있습니다.원격 이벤트 구동 시스템을 구현하는 데 필요한 요소는 무엇입니까? - 개요가 필요합니다.

다른 시스템 아키텍처, 특히 Windows 7과 다를 수있는 분산 아키텍처에서 실행되는 여러 구성 요소에 쉽게 배치 할 수 있도록 시스템을 설계하고 싶습니다. 자체 외부의 시스템과 통신 할 수 있습니다.

내가 고려해야 할 아키텍처를 조사해 보았으며 아래에서 언급 한 질문을 살펴 보았습니다. 이것들은 하드웨어 간 (inter-hardware) 통신을위한 메커니즘으로서 명명 된 파이프 (named pipes)를 이용하는 것을 가리키는 것처럼 보인다. 이러한 조사의 결과로 필자는 내 시스템을 설명하기 위해 다음을 스케치했습니다. 다이어그램의 첫 번째 부분은 개발중인 시스템입니다. 두 번째 부분은 향후 구현이 필요할 것으로 추측 한 것입니다. Design sketch

이 다음과 같은 점에 이르게 :

  1. 이 명명 된 파이프를 통해 이벤트를 전달할 수 있습니까?
  2. 이 문제를 해결하기 위해 적절하고 합리적인 구조입니까?
  3. 더 좋은 대안이 있습니까?
  4. (이 세분성 수준에서) 무엇을 잊었습니까?

How is event driven programming implemented? How do I send a string from one instance of my Delphi program to another?

편집 : 나는 "@I 쓰레기의 답을주고"응답 충분한 고려에서 발생하는 포인트를 부여하지 않았다

. 자신의 포인트 내 초기 반응은 다음과 같습니다

  1. 동기 V의 비동기 - 대부분 비동기
  2. 이벤트는 항상 FIFO 큐에있을 것입니다.
  3. 연결 상실 - 대단히 중요하지 않습니다. - 저는 비 강직적 인 태도를 감당할 수 있습니다.
  4. 무제한 대기열은 전달되는 이벤트를 처리하는 완벽하게 좋은 방법입니다 (있을 수있는 경우) - 대량의 이벤트 생성을 기대하지 않습니다.
+0

어떤 OS입니까? Windows? –

+0

@ S.Lott 질문에 명시된 바와 같이 나는 Windows 7 용으로 처음 개발 중입니다. 향후 구현에는 Linux 서버 호스팅 백엔드에 대해 실행되는 UI 요소 웹 기반이 포함될 수 있습니다. 나는 내가 이런 종류의 미래 발전에 장애가되지 않도록 그것을 설계하고 싶다. –

+0

죄송합니다. 태그에는 대개 운영 체제가 포함됩니다. OS가 태그에서 누락 된 이유는 확실하지 않았습니다. –

답변

3

건배 할 준비가 자바 플랫폼에서. 표준 프로토콜 사용. Delphi 및 기타 프로그래밍 언어와 잘 통합되고 웹 응용 프로그램과 함께 사용할 수 있으며 대규모로 설치된 사용자 기반과 활성 커뮤니티가 있습니다.

몇 분 안에 설치하고 구성하기가 쉽고 무료/상용 클라이언트 인 Delphi를 사용할 수 있습니다.

몇 가지 예는 다음과 같습니다

가 나는 또한 월에 의해 책 "엔터프라이즈 통합 패턴"을 추천합니다 Snow Fowler는 개요 및 소개로, 특정 문제를 다루는 많은 간단한 방법을 제공합니다. xmlBlaster, RabbitMQ, 아마존 심플 큐 서비스 및 세 브로커는 위에서 언급 한 같은 내가 엔터프라이즈 메시징 시스템을위한 상업 델파이의 클라이언트 개발자입니다


참고.

+0

나는이 모든 메시지 중개인이 이벤트를 처리한다고 가정하고 있다고 생각합니다. 기본으로 보일지 모르지만 이것은 명확하지 않은 점 중 하나입니다. –

+1

메시지 브로커는 성능을 유지하기 위해 대부분 단순 데이터 형식 또는 키/값 맵 전송에 사용되지만 직렬화 된 객체도 전송할 수 있습니다. 이벤트가 직렬화되거나 단순 데이터 유형으로 표현 될 수 있으면 브로커가 처리 할 수 ​​있습니다. – mjn

2

나는 단지 여기 지점 4 응답 할 수 있습니다 : 이벤트 동기 또는 비동기의 경우 아직 결정하지 못했다. 비동기 경우에는 메시지가 도착할 때 수행 할 작업을 결정해야합니다. 대기열이 있습니까? 대기열이 얼마나 큽니까? 대기열에서 임의의 요소를 가져올 수 있습니까? 아니면 엄격하게 FIFO입니까? 메시지가 손실되면 어떻게됩니까? (일부 축은 네트워크 케이블을 사용합니까)?

동기화 변형에서 이점은 배달 보장이 있다는 것입니다. 그러나 갑자기 연결이 끊어지면 어떻게해야합니까?

연결 손실이 문제가 될 수 있습니다. 보유하고있는 기계가 많을수록 그 기계가 발생할 가능성이 커집니다. 어떻게 처리 할 것인지 결정하십시오.

큰 이벤트가 있고 작은 이벤트가있는 경우 다른 문제가 발생할 수 있습니다. 전송 FIFO 또는 최소 우선 순위입니까? 이벤트를 재정렬 할 수 있습니까? 여기서 가정은 무엇입니까?


제쳐두고 나는 Erlang을 많이 해킹합니다. Erlang에서는 모든 이벤트 처리가 이미 해결되었지만 특정 모델이 선택되었음을 의미합니다 (비동기, 제한되지 않은 대기열, 보장 된 배달 없음, 연결 손실 감지).

1

RabbitMQ, http://www.rabbitmq.com/을 살펴 보시기 바랍니다. 그것은 서버와 클라이언트를 가지고 있습니다. 그냥, 내가 도망 인기있는 오픈 소스 메시지 브로커를 살펴하는 것이 좋습니다 델파이의 일부 래퍼 코드를 필요로하고 당신은 당신의 비즈니스 로직 구축 최대 배치 유연성 (독립 운영 체제)에 대한

+0

[언급 된] 구성 요소를 사용할 수 있습니다 (http://stackoverflow.com/questions/4811734/what-elements-are-needed-to-implement-a- remote-event-driven-system-overview-n/4813453 # 4813453) 그 [mjn] (http://stackoverflow.com/users/80901/mjn)에 의해. 그들은 좋다. –

관련 문제