2011-01-29 115 views
1

好的,這是我的情況: 我在尋找最好的設計方法。 我在服務器端使用PHP/Smarty,客戶端使用HTML/jQuery,但在這裏並不重要。客戶端 - 客戶端交互設計問題?

我在我的服務器上有這個多用戶系統。 它是一種訂貨系統。 標準用戶 - 讓我們稱他們爲顧客 - 可以從網上商店訂購一些商品。 網上商店包含來自多個賣家的商品。

當用戶(客戶)下訂單,賣家 - 也是在系統中的用戶 - 已經得到通知,有一個新的訂單,並確認/拒絕它。

當賣方確認/下降的順序,通知已被髮送到用戶給他/她他/她的訂單的狀態。

訂單存儲在數據庫中,以及訂單確認。

我現在能想到的唯一方法就是不斷地 - 在與AJAX的短時間間隔內 - 從賣家的屏幕上檢查數據庫中的新記錄,並且當他/她正在等待確認。

但我在想,有沒有什麼辦法來觸發通知賣家,當用戶(客戶)下訂單,以便在需要時,賣方只能加載數據庫和間隔不不斷?

客戶在等待確認時也是如此。但這並不重要,因爲它不會一直髮生。如果賣家沒有回覆,訂單會自動被拒絕。

我希望你能理解我的問題。

+1

我想你應該看看COMET--它基本上是一個封裝各種方式來模擬PUSH機制的術語。看看這個答案http://stackoverflow.com/questions/603201/using-comet-with-php和這一個http://stackoverflow.com/questions/1320542/simple-comet-example-using-php-and- jQuery的我認爲,應該給你足夠的開始 – InSane 2011-01-29 18:08:31

回答

1

回答類似於Using Comet with PHP的問題表明,Apache線程可能會與所有打開的客戶端連接有關。

根據這篇關於PHP Continuations的博客文章,可以對PHP使用continuations,但似乎並沒有太多關於該主題的文檔。但是,CometChat did it in PHP。目前還不清楚他們是否使用延續,但他們聲稱可以擴展到100,000個連接。有關PHP Comet的更多信息可以在類似的堆棧溢出問題A Solution for Comet and PHP中找到。

我還打算建議使用Java,因爲Java在實現可擴展Comet with Continuations方面有非常好的記錄。 Conversion Support是在Jetty Web Server上使用彗星和延續的聊天軟件的一個例子。

由於您的代碼使用PHP,因此您可以使用Use Querces to run your PHP code on the JVM。此外,Querces PHP Benchmarks Suggest it's Faster than Apache,這給你額外的優勢。查看Querces Project瞭解更多信息。

更新:我建議你自己做基準或自己研究速度問題,因爲可能有一些信息可能表明Apache更快。如果使用查詢,重要的是要明白,你基本上正在編寫Java,看起來就像PHP一樣。因此,我還建議在那裏進行更多的研究,以便了解這種方法的優缺點。

0

雖然即時更新將是很好的,在現實中,更新絕不會瞬間無論如何,總會有在通過互聯網transfering數據一定程度的固有等待時間的。

由於以下幾個原因,輪詢選項似乎更具吸引力。

系統你描述聽起來好像雖然它開始時規模很小,它會很容易地擴展到多服務器配置。輪詢將允許您創建AJAX請求可以查詢的輪詢服務器。這可以針對AJAX的小型和快速特性進行優化,因爲標準Web服務器可以專用於通常意義上的網頁顯示。

輪詢理念還適合於一個REST風格的API,使得投票區完全獨立的瀏覽器。你可以找到更深層次的原因,系統上的賣家更喜歡擁有原生應用程序,甚至是iPhone/Android應用程序。 REST API將允許您從任何可以發出HTTP請求的應用程序執行此操作。

從本質上講,您正在避免被鎖定到特定的技術,並打開未來的可能性。它不會增加任何大量的工作,並且提供了滲透性連接不允許的柔性水平。

0

上面提到的COMET和長輪詢是解決這個問題的常用方法。但您也可以查看HTML5網絡套接字。它支持所有瀏覽器,但是IE瀏覽器有補丁/補丁。

你也可以看看Node.js沿着apache運行。