apache可以处理非http消息

时间:2010-06-19 20:38:11

标签: apache sockets module port listen

我有一个apache webserver,我们需要在其中开发一个模块(使用mod_python或mod_wsgi)。它将处理作为http GET / POST发送的请求。但是,我们希望此模块 ALSO 处理由非基于http的其他远程应用程序发送的消息。也就是说,那些tcp包的主体可能只是一个json或xml格式的消息。该远程应用程序每隔一段时间就会不停地发出通知,并且不期待来自apache模块的任何响应。

我想知道我是否可以在我的模块中生成两个线程(一个在端口80上收到http消息时从apache接收消息,另一个线程在另一个端口上侦听...说2000 ..我的远程机器已配置发送到2000端口)。另一种可能性是我在我的apache机器上运行一个单独的应用程序,侦听端口2000.当它收到通知时,我将其包装成http消息并将其发送回自己的端口80.

我想问题是:我的模块是否仅限于通过apache(来自端口80)获取消息,或者我的apache模块是否也能侦听其他端口?如果有更简单的解决方案,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用VirtualHost指令设置apache以侦听不同的端口:

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>

答案 1 :(得分:0)

由于大多数配置中的Apache都是一个多进程Web服务器,因此您不能只从Python代码中侦听单独的套接字,因为多个进程会尝试执行相同操作,因此它们会发生冲突。

从技术上讲,您可以将mod_wsgi守护程序模式用于WSGI应用程序,并使用单个进程运行它以避免多进程问题,但仍然会怀疑这是否是一个好主意,与Apache不同的完全独立的进程可能更好。< / p>