2010-06-19 106 views
0

我有一個apache web服務器,我們需要在其中開發一個模塊(使用mod_python或mod_wsgi)。它當然會處理作爲http GET/POST發送的請求。但是,我們希望此模塊能夠處理由不是基於http的其他遠程應用程序發送的消息ALSO。也就是說,這些tcp數據包的主體可能只是一個json或xml格式的消息。該遠程應用程序只是每隔一段時間不斷地發出通知,並且不期待來自apache模塊的任何響應。apache可以處理非http消息

我想知道如果我可以在我的模塊中產生兩個線程(一個接收來自Apache的消息,當在端口80上接收到http消息時,另一個線程正在監聽某個其他端口..說2000 ..而我的遠程機器是配置爲發送到端口2000)。另一種可能是我在監聽端口2000的apache機器上運行一個單獨的應用程序。當它收到通知時,我將它封裝到http消息中,並通過端口80將它發回給自己。

我猜問題是:我的模塊僅限於通過apache(從端口80)獲取消息,或者我的apache模塊是否也可以在其他端口上偵聽?如果有更簡單的解決方案,請告訴我。謝謝。

回答

0

你可以設置Apache監聽在不同的端口,使用VirtualHost指令:

Listen 80 
Listen 2000 

<VirtualHost *:80> 
    ServerName www.example.com 
    WSGIScriptAlias//path/to/script.wsgi 

    <Location /my/location> 
    ... 
    </Location> 
</VirtualHost> 

<VirtualHost *:2000> 
    ServerName www.example.com 
    WSGIScriptAlias//path/to/script.wsgi 

    <Location /my/location> 
    ... 
    </Location> 
</VirtualHost> 

更多信息here

但是,它可能更容易監聽端口80,通過使用不同的路徑,像這樣區分:

<VirtualHost *:80> 
    WSGIScriptAlias /normal /path/to/script.wsgi 
    WSGIScriptAlias /notifications /path/to/script.wsgi 
    WSGIApplicationGroup %{GLOBAL} 
    ... 
</VirtualHost> 
+0

感謝您的回答。但通知不會以http:// url/notifications的形式進入。它們只是包含一些數據的普通tcp/ip消息(可能是文本文件或xml文件)。消息中沒有http頭。 「WSGIScriptAlias//path/to/script.wsgi」行是否仍將這些消息發送到script.wsgi? – 2010-06-20 18:12:46

0

因爲Apache的大多數配置是一個多進程的Web服務器,你不能只聽在你的Python代碼的一個單獨的套接字上,因爲多個進程會試圖做同樣的事情,所以它們會發生衝突。

從技術上講,你可以爲你的WSGI應用程序使用mod_wsgi守護進程模式,並使用單個進程運行它以避免多進程問題,但仍然會質疑這是否是一個好主意,而且與Apache完全分離的進程可能更好。