2012-07-11 4 views
1

나는 사용자가 PHP를 통해 연결할 수있게하려는 .net winform 응용 프로그램을 가지고 있습니다.PHP를 통한 .net과의 통신

저는 PHP를 개인적인 선택으로 사용하고 있으며 비용을 낮게 책정하고 있습니다.

빠른 개요 :

사람들은 내 .NET 응용 프로그램에 연결하고 브라우저를 닫아도 계속 실행하는 새로운 스레드를 시작할 수 있습니다. 그런 다음 언제든지 로그인하여 스레드가 수행중인 작업의 상태를 볼 수 있습니다.

아이디어 1 - 소켓 :

현재 나는이 두 가지 방법으로 올라와있다

사용자가 처음으로 연결하고 "는 GUID가 자신과 관련된 스레드를 생성합니다 때 웹 "로그인 세부 정보.

다음에 PHP는 소켓을 통해 응용 프로그램에 연결됩니다. PHP는 GUID와 함께 "GET.UPDATE"명령을 보내고 주어진 GUID의 MESSAGE IN QUEUE에 추가됩니다.

닷넷 응용 프로그램은 스레드가 대기열에서 메시지를 확인하고는 "GET.UPDATE"을 볼 때 그 다음 JSON으로 데이터를 endcodes하고 MESSAGE OUT QUEUE

가 다음 번에 추가 명령입니다 양산 해당 GUID에서 PHP 소켓 요청 인 경우 MESSAGE OUT QUEUE에 데이터를 보냅니다.

아이디어 2 - 데이터베이스 :

위와 동일하지만, 아이디어 PHP에서 명령은 데이터베이스에 메시지 데이터베이스에 새에 대한

의 .NET 응용 프로그램 스레드 검사를 넣어 얻을

경우 GET.UPDATE 명령을 사용하여 데이터베이스에 json으로 인코딩 된 데이터를 추가합니다.

다음 번에 PHP가 연결되면 데이터베이스에서 새 메시지를 확인하고 이에 따라 데이터를보고합니다.

나는 위의 두 가지 아이디어 중 무엇이 가장 좋을지 궁금합니다. 소켓에 관한 문제는 quicly 통증이 될 수 있습니다. 그러나 나는 1000 명의 사용자가있는 경우 대기열에 많은 메시지가있는 경우 속도가 느려질 수있는 데이터베이스 테이블을 갖게 될 것이라고 생각합니다.

모든 조언이 제공됩니다.

답변

0

두 가지 방법 모두 사용할 수 있지만 높은 사용자로드가 필요한 경우 접근 방식을 다시 고려할 수 있습니다. WinForms 솔루션은 수천 개의 요청을보고있는 경우 WCF 솔루션만큼 강력하지는 않습니다. 프로세스의 결과가 이미 데이터베이스에 저장되어 있지 않으면 메시징에만 데이터베이스를 사용하는 것을 권장하지 않습니다. 그렇다면 노출 된 API를 통해 직접 데이터베이스를 노출하는 것이 아니라 데이터베이스 액세스를 제어하는 ​​것이 좋습니다. 데이터베이스는 고 가용성/확장 성을 갖도록 만들어 졌으므로 SQLite와 같은 로우 엔드 데이터베이스를 사용하지 않는 한로드가 너무 걱정스럽지 않습니다.

데이터베이스를 공개하고 어떤 이유로 든 메시징 서비스로 사용하려는 경우 Postgresql's LISTEN/NOTIFY을 제안 할 수 있습니다. Npgsql은이를 잘 지원하며 구현하기가 매우 쉽습니다.Postgresql은 또한 커다란 커뮤니티를 통해 무료로 사용할 수 있습니다.