2011-01-21 128 views
1

什麼是使用Web服務實現服務器到客戶端回調(事件)的好方法?客戶端mod_perl服務器事件

我們已經有了一個基於SOAP的API,它由運行在Apache上的mod_perl公開,但它是服務器的一種客戶端方式。我們需要通知其他客戶端在服務器上發生的某些更改。

什麼是使這項工作的好方法?可用的perl模塊?

我們認爲的一件事是做一個長時間運行的web請求,最終會在事件發生時做出響應,但是如果連接了很多客戶端,這似乎會保留太多的mod_perl進程。

回答

3

其中一種方法就是您提到的長期投票。另一個是websockets。有許多Perl框架能夠處理websockets請求,其中之一是Mojolicious

有關示例,請參閱Mojolicious::Lite#WebSockets處的文檔。

我會建議你的情況分別從mod_perl服務器運行websockets webapp,以及「僅僅」使用Apache來反向代理mojolicious應用程序。

+0

只需要注意一點:就像OP問道的那樣,長時間運行的民意調查對可擴展性不利,因爲它們將在投票期間爲單個客戶端綁定單個apache進程。另外,網絡套接字是新的,並不適用於所有的客戶端。使用現有瀏覽器技術的另一種替代方法是Comet,但這需要不同類型的服務器進行擴展:http://en.wikipedia.org/wiki/Comet_%28programming%29 – mpeters 2011-01-21 16:05:53

0

你真的嘗試過你的第一個方法嗎?那會有多少個最大的併發客戶端?幾十個應該可以由Apache管理。只是猜測。

您是否試過這種低科技的方法"Watching long processes through CGI",或者是您想擺脫在第一個地方?

+0

通常會有大約100-200個用戶該系統,但他們可能有大約10個左右的客戶端應用程序在多臺PC上接收事件。我們寧願預先考慮高用量,以防止將來出現問題。 – jonathanpeppers 2011-01-25 18:54:05