2011-01-29 3 views
1

좋아, 여기 내 상황이있다 : 나는 최고의 디자인 접근법을 찾고있다. 저는 PHP/Smarty에서 서버 측과 HTML/jQuery로 클라이언트 측에서 작업하고 있습니다 만, 여기서는 그다지 중요하지 않습니다.클라이언트 - 클라이언트 상호 작용 설계에 문제가 있습니까?

내 서버에이 다중 사용자 시스템이 있습니다. 그것은 일종의 주문 시스템입니다. 표준 사용자는 고객에게 전화를 걸어 웹샵에서 일부 항목을 주문할 수 있습니다. webshop에는 여러 판매자의 항목이 있습니다.

사용자 (고객)가 주문을하면 판매자 (시스템의 사용자)에게 새 주문이 있음을 알리고 확인/거부해야합니다.

판매자가 주문을 확인/거부하면 사용자에게 주문 상태를 알려주는 알림을 보내야합니다.

주문은 주문 확인뿐만 아니라 데이터베이스에 저장됩니다.

내가 생각할 수있는 유일한 방법은 AJAX로 짧은 간격으로 - 판매자 화면에서 데이터베이스의 새로운 레코드를 확인하고 고객에게 동일한 작업을 수행하는 것입니다. 그녀는 확인을 기다리고 있습니다.

하지만 사용자 (고객)가 주문할 때 판매자에게 알림을 트리거 할 수있는 방법이 있습니까? 판매자가 간격을두고 필요하지 않을 때만 판매자가 데이터베이스를로드 할 수 있도록하려면 어떻게해야합니까?

확인을 기다리는 고객에게도 마찬가지입니다. 그러나 그것은 항상 그렇게되지 않기 때문에 그렇게 중요하지 않습니다. 판매자가 응답하지 않으면 주문이 자동으로 거절되는 대기 제한이 있습니다.

내 질문에 대한 이해를 바랍니다.

+1

저는 COMET을 살펴 봐야한다고 생각합니다. 기본적으로 PUSH 메커니즘을 시뮬레이트하는 다양한 방법을 캡슐화하는 용어입니다. 이 답변을 확인하십시오 http://stackoverflow.com/questions/603201/using-comet-with-php and this one http://stackoverflow.com/questions/1320542/simple-comet-example-using-php-and-php jquery 나는 당신을 시작하기에 충분해야한다고 생각한다. – InSane

+0

고마워. COMET은 갈 길이 멀어 보인다. 나는이 두 가지 실에서 조금 잃어 버렸습니다. 다중 사용자 시스템에 대한 예제를 찾을 수 없습니다. 어떤 도움이 필요합니까? – ZolaKt

+0

확인. 나는 COMET과 long polling에 관한 기사를 읽었으며 지금은 꽤 많이 이해하고 있습니다. 유일한 문제는 내가 아파치 서버에 붙어있어서 그 일을위한 최선의 선택이 아니라는 것이다. 누구든지 아파치가 같은 시간에 사용할 수있는 최대 연결 수를 말해 줄 수 있습니까? – ZolaKt

답변

1

Using Comet with PHP과 비슷한 질문에 대한 대답은 클라이언트에 대한 모든 열린 연결에서 묶여있는 Apache 스레드에 몇 가지 문제가있을 수 있음을 나타냅니다.

블로그 게시물 PHP Continuations에 대한이 블로그 게시물에 따르면, PHP에서 연속 사용이 가능하지만 그 주제에 관해 많은 문서가없는 것 같습니다. 그러나 CometChat did it in PHP. 연속체를 사용하고 있는지는 명확하지 않지만 10 만 개의 연결로 확장한다고합니다. PHP Comet에 대한 더 많은 정보는 A Solution for Comet and PHP에 관한 비슷한 Stack Overflow Question에서 찾을 수 있습니다.

자바는 확장 성있는 확장 가능한 Comet 구현을위한 훌륭한 실적을 보유하고 있기 때문에 자바를 사용할 것을 제안하려고합니다. Conversion SupportJetty Web Server에서 혜성과 연속을 사용하는 채팅 소프트웨어의 예입니다.

코드가 PHP이므로, Use Querces to run your PHP code on the JVM 수 있습니다. 또한 Querces PHP Benchmarks Suggest it's Faster than Apache을 사용하면 추가 이점을 얻을 수 있습니다. 자세한 내용은 Querces Project을 확인하십시오.

업데이트 : 당신이 자신의 벤치 마크를하거나 속도 문제를 직접 조사해보십시오. 아파치가 더 빠를 것이라고 제안 할만한 정보가있을 수 있습니다. Querces를 사용한다면 PHP처럼 보이고 느끼는 Java를 작성하는 것이 중요하다는 것을 이해하는 것이 중요합니다. 따라서이 방법의 장점과 단점을 이해할 수 있도록 추가 연구를 제안 할 것입니다.

0

인스턴트 업데이트가 좋지만 실제로는 업데이트가 즉시 이루어지지 않을 것입니다. 항상 인터넷을 통해 데이터를 전송할 때 일정한 지연이 있습니다.

폴링 옵션은 여러 가지 이유로 더 매력적으로 보입니다.

소규모로 시작될 수는 있지만 마치 다중 서버 구성으로 쉽게 확장되는 것처럼 소리를내는 시스템은 소리가납니다. 폴링을 사용하면 AJAX 요청에서 쿼리 할 수있는 폴링 서버를 만들 수 있습니다. 이는 AJAX의 작고 빠른 특성에 맞게 최적화 할 수 있습니다. 표준 웹 서버는 일반적인 의미에서 웹 페이지 표시 전용으로 사용할 수 있습니다.

폴링 아이디어는 REST 스타일 API에 적합하여 폴링 영역을 브라우저와 완전히 독립적으로 만듭니다. 더 나아가 시스템의 판매자는 기본 앱 또는 iPhone/Android 앱을 선호합니다. REST API를 사용하면 HTTP 요청을 할 수있는 모든 앱에서이 작업을 수행 할 수 있습니다.

본질적으로 특정 기술에 얽매이지 않고 미래의 가능성을 열어줍니다. 엄청난 양의 작업을 추가하지 않으며 영구 연결에서 허용하지 않는 일정 수준의 유연성을 제공합니다.

0

위에서 언급 한 COMET 및 긴 폴링은이 문제에 대한 일반적인 해결책입니다. 그러나 HTML5 웹 소켓을 조사 할 수도 있습니다. 모든 브라우저에서 지원되지만 IE 브라우저 용 패치/폴리필이 있습니다.

Node.js에서 사이드 아파치를 실행하도록 할 수도 있습니다.