我有一个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模块是否也能侦听其他端口?如果有更简单的解决方案,请告诉我。谢谢。
答案 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>