【问题标题】:can apache handle non-http messagesapache可以处理非http消息吗
【发布时间】:2011-03-05 20:44:58
【问题描述】:

我有一个 apache 网络服务器,我们需要在其中开发一个模块(使用 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 模块也可以侦听其他端口?如果有更简单的解决方案,请告诉我。谢谢。

【问题讨论】:

    标签: apache sockets module port listen


    【解决方案1】:

    您可以使用 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>
    

    【讨论】:

    • 感谢您的回答。但是通知不是以url/notifications 的形式出现的。它们只是带有一些数据的普通 tcp/ip 消息(可以是文本文件或 xml 文件)。消息中没有 http 标头。 “WSGIScriptAlias / /path/to/script.wsgi”这行是否还会向script.wsgi发送此类消息?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 1970-01-01
      • 2012-05-04
      • 2018-02-10
      • 2017-04-16
      • 1970-01-01
      • 2016-06-06
      • 2010-11-03
      • 1970-01-01
      相关资源
      最近更新 更多