2010-08-07 11 views
5

델파이로 작성된 클라이언트/서버 애플리케이션이 있습니다. 본질적으로 모든 응용 프로그램은 서버 응용 프로그램과 연결된 클라이언트간에 XML 데이터 스트림을 전송합니다. 현재 Indy TIdTCPServer 구성 요소를 사용하고 있습니다. 그러나 서버 측 응용 프로그램은 일부 할부에서 계속 충돌합니다. 그리고 디버깅하기가 극히 어려웠습니다. 그래서 내가 모든 tcp/ip 연결 관리 및 데이터베이스 연결 풀링을 활용해야하는 "아키텍처"가 있는지 궁금해서 비즈니스 논리에 집중할 수있게 해줍니다.어떤 델파이 기술을 사용해야합니까?

여기에 자세한 내용은 다음과 같습니다

  • 클라이언트는 "영구"연결을 유지해야합니다. 서버가 연결된 모든 클라이언트에 데이터를 알리고 보내야하는 경우가 있습니다.
  • 클라이언트가 무선 에어 아워를 사용하여 랩톱 컴퓨터에서 연결하고 있습니다. 따라서 네트워크 "드랍스"는 꽤 흔합니다.
  • 백엔드 데이터베이스는 SqlServer입니다.
  • 한 번에 최대 100 대의 컴퓨터가 동시에 연결될 수 있습니다. 서버가 새 연결 (TCPServer.OnConnect)을 얻으면 자체 SqlServer 데이터베이스 연결이 포함 된 자체 개체를 인스턴스화합니다. tcp 연결이 끊어지면 나는이 객체들 (그리고 연관된 데이터베이스 연결)을 해제한다.
  • 클라이언트 응용 프로그램에는 TTimer가 내장되어 있습니다. 그들은 일상적으로 서버에 하트 비트를 전송합니다. 그리고 연결이 "끊어 지거나"없어지면 네트워크가 다시 연결되면 자동으로 새 연결을 설정합니다.

사람은 여기에 가장 좋은 방법/아키텍처에서 어떤 제안이?
Indy 구성 요소가 작동한다고 가정하지만 동시에 연결 관리와 관련하여 "바퀴를 다시 발명"한다고 생각합니다. 나는 그 알고

+1

자체 롤링이란 고유 한 프레임 워크를 유지 관리하는 데 일정 비율의 시간을 사용하는 것을 의미합니다. Delphi에서 효율성을 높이려면 이미 지원되고 지원되는 상업적으로 지원되는 기술/툴킷/구성 요소를 평가해야한다는 아이디어가 우수합니다. 물론 오픈 소스 도구가 유용 할 수도 있습니다. 그러나 시간이 돈보다 부족하다면 상업용 솔루션으로 가십시오. –

+0

절대적으로 - 정확하게 내가 무엇을 얻고 있는지. 난 단지 검증 된 C/S "3 계층"아키텍처가 필요합니다. –

답변

6

세 가지 구성 요소 세트는 당신을위한 클라이언트 서버 응용 프로그램의 핵심적 껄끄 러운 기술적 측면의 처리됩니다 :

당신은 이러한 구성 요소 세트 작업 방식을 활용하는 응용 프로그램을 재 작업해야하지만, 당신을 가정 할 수있다

적절하게 분리 된 레이어를 가지고 너무 혼란스럽지 않아야하며 클라이언트 서버 작업을 위해 잘 테스트되고 널리 사용되는 코드의 장점을 살 것입니다.

+1

+1. 나는 RemObjects와 kbmMW를 평가했으며 그들은 훌륭합니다. 나는 Asta를 평가하지 않았지만 유망 해 보인다. –

+3

Asta는 아마도 더 이상 개발되지 않았기 때문에 아마 최선의 선택이 아닐 것입니다. –

+0

@ dmauric.mp : 감사합니다. 사이트를 다시 보면 꽤 오래된 버전입니다 : 델파이 버전 7 및 메인 페이지 마지막 업데이트 2006 년 1 월 28 일을 지원하는 Asta 3.0을 언급합니다 ... –

1

가벼운 TCP/IP 구성 요소가 필요한 경우 SynCrtSock 장치를 살펴보십시오.

하위 수준의 클래스를 사용하여 IP 클라이언트 및 서버를 만들 수 있습니다. 우리는 우리의 응용 프로그램 중 하나에서 TCP/IP와 UDP/IP를 모두 구현했습니다.

또한 HTTP/1.1 서버를 구현하는 THttpServer 클래스가 있습니다. 따라서 HTTP/1.1 연결 관리를 따릅니다. 선택적 압축도 있으며 80 이외의 포트에서 HTTP/1.1을 사용하는 것은 좋지 않습니다. 그리고 HTTP/1.1의 장점은 방화벽을 통과 할 수 있으며 프록시를 통해 다른 HTTP 서버 (IIS 또는 Apache와 같은)에서 쉽게 VPN 또는 호스팅 될 수 있다는 것입니다. 리눅스 기반 솔루션으로 그러한 서버가 필요한 경우 FastCGI 클래스도 있습니다. 물론 THttpClientSocket 클래스는 클라이언트 클래스에서 동일하게 작동합니다.

우리는 우리의 오픈 소스 sqlite3를 편안하고 프레임 워크에 HTTP/1.1 연결을 추가하려면 다음 클래스를 사용 - http://synopse.info/forum/viewforum.php?id=2

가 SynCrtSock 단위 http://synopse.info/fossil/artifact?name=722e896e3d7aad1fe217b0e2e7903483e66d66d1를 참조하십시오. 오픈 소스는 Delphi 7에서 Delphi 2010까지 작동합니다.

+0

HTTP는 클라이언트가 연결 및 요청을하고 서버가 데이터로 응답하고 클라이언트의 연결이 끊어진다는 의미에서 자동으로 "Stateless"로 간주합니까? 이 특정 응용 프로그램은 지속적인 연결을 유지해야합니다. –

+0

HTTP/1.1은 지속적 연결을 정의합니다. 우리의 구현에서, 우리는 제공된 Keepiseconds 지정된 값 동안 연결을 유지하기 위해 "KeepAliveMS"속성 (클라이언트 측)을 설정합니다. 그것은 서버의 관점에서 볼 때 stateless이지만 연결은 끊어지지 않습니다. 이러한 영구 연결을 통해 Windows에서 최대 x40 속도 향상을 경험 한 적이 있습니다. 쿠키를 사용하여 세션 기능을 제공 할 수 있습니다. 그러나 우리는 RESTful 프레임 워크를 구현하기 위해 쿠키를 사용하지 않고 순수한 상태 비 저장 프레임 워크를 사용했습니다. –

1

Misha Charrett의 CSI Application Framework은 사용자가 요구하는 바를 정확히 보여줍니다.

오픈 소스 Delphi 프레임 워크는 클라이언트와 서버 모두에서 클라이언트로 전달되는 XML 메시지를 허용하는 분산 메시지 전달 및 스레딩 프레임 워크입니다.

연결 해제/재 연결, 높은 클라이언트 번호를 처리 할 수 ​​있으며 SQL 서버를 처리하는 선택적 가상 데이터베이스 라이브러리가 있습니다 (또는 지금 사용중인 것과 동일한 SQL Server 액세스를 사용할 수 있음).

아직 잘 알려지지 않았지만 지난 몇 년 동안 적극적으로 개발되었으며 저자 인 Misha는 자신의 응용 프로그램에서 사용하는 데 관심이있는 사람을 돕는 데 매우 열심히 노력하고 있다고 말할 수 있습니다.

+0

감사합니다. 나는 이것에 대해 알아 보겠다. –

0

Indy를 사용하는 경우 각 연결은 스레드와 같습니다.

어쨌든, 나는 무엇을 그것은 TThread 변경에 필요한 변경하지만 나도 몰라 (http://www.torry.net/authorsmore.php?id=7131에서/O 완료 포트 Devart http://www.devart.com/sdac/에서 SDAC를 사용하는 MSSQL에 연결 및 I에 따라 HPScktSrvr를 사용하도록 연결 층을위한 제안 최신 VCL에서). 클라이언트 클래스 arround THPServerClient를 빌드하고 새 클래스를 서버 ClientClass로 설정하면 프레임 워크가 자동으로 새 클라이언트를 작성합니다. 그것은 아마 대신 인디 구성 요소를 사용하여 C/S 코드의 대부분의 완전한 재 작성을 요구, http://www.overbyte.be/

0

는 또한 ICS/Midware 콤보를 보라 할 수 있습니다 대신 COM + 솔루션을 사용할 수 있습니다. 기본적으로 서버에 설치할 COM + 구성 요소를 만들고 클라이언트 응용 프로그램은이 클라이언트에 연결하여이 구성 요소의 기능을 직접 호출합니다. 그것은 Windows 자체에서 처리 할 트랜잭션 관리를 가지며 트랜잭션 처리에 대해서도 마찬가지입니다. 기술적으로 이벤트를 생성하는 것도 가능합니다. 이벤트를 작성하면 서버가 클라이언트에 대한 콜백을 수행 할 수 있지만 상황이 좀 복잡해지기는합니다.
Windows에서 COM 개발에 대한 많은 경험이 있거나 다른 것을 시도 할만큼 용감한 사람이 아니라면이 솔루션이 도움이 될 것이라고 생각하지 않습니다.
과거에는 수많은 클라이언트가 단일 서버에 연결하여 모든 종류의 데이터베이스 트랜잭션을 수행해야했던 비슷한 문제가있었습니다. 그것은 가파른 학습 곡선을 가지고 있지만 나와 팀이 일을 처리하고 일단 기술을 이해하면 매우 안정적이고 안정적인 솔루션을 만들었습니다.이 솔루션은 최대 500 명의 사용자가 동시에 업데이트 및 기타 작업을 수행 할 수있었습니다 극한 스트레스 테스트. 그러나 다시 배움의 저주는 가파르므로 원하는 해결책이 아닐 수도 있습니다.
(여전히 COM +는 트랜잭션 관리, 데이터베이스 풀링 등과 같이 Windows에 내장 된 많은 기능을 사용합니다.)

+0

ICS를 다시 살펴 봐야 할 것입니다. 사실이 구성 요소를 가지고 있습니다. 그러나 내가 아는 한 Indy/IpWorks가 기본적으로 수행하는 것은 "TCP/IP"구성 요소였습니다. 내가 궁극적으로 찾고있는 것은 하나의 연결 관리와 데이터베이스 풀링을하는 구성 요소입니다. –

+1

ICS는 Indy와 같습니다. 미드웨어는 ICS를 통신 계층으로 사용하는 다중 계층 응용 프로그램의 다른 제품입니다. 그들은 같은 사람과 별개의 두 제품입니다. :-) –

1

음 :

+1

자세한 답변을 주셔서 대단히 감사합니다. 사실 COM 경험이 없습니다. 필자의 전문 기술은 델파이 컴포넌트와 써드 파티 툴로 제한되어있다. –

+0

글쎄, 내가 여기서 말한 것을 잊어 버려. COM (및 COM +)은 처음에는 학습 곡선이 높습니다. 그러나이 기술을 이해하면 타사 구성 요소 없이도 표준 Windows 기능을 사용할 수있어 유용합니다. –

관련 문제