может ли apache обрабатывать не-http сообщения

У меня есть веб-сервер apache, и нам нужно разработать в нем модуль (используя mod_python или mod_wsgi). Конечно, он будет обрабатывать запросы, отправленные как http GET/POST. Однако мы хотели бы, чтобы этот модуль ТАКЖЕ обрабатывал сообщения, отправленные другими удаленными приложениями, которые НЕ основаны на http. То есть тело этих tcp-пакетов может быть просто сообщением в формате json или xml. Это удаленное приложение просто время от времени выдает уведомления и не ожидает никаких ответов от модуля apache.

Мне было интересно, могу ли я создать два потока в моем модуле (один получает сообщения от apache, когда http-сообщения принимаются на порту 80, другой поток прослушивает какой-то другой порт... скажем, 2000... и моя удаленная машина настроена на отправку на порт 2000). Другая возможность заключается в том, что я запускаю отдельное приложение на своем компьютере с apache, прослушивая порт 2000. Когда оно получает уведомление, я оборачиваю его в http-сообщение и отправляю обратно себе на порт 80.

Я предполагаю, что вопрос в том, ограничен ли мой модуль получением сообщений только через apache (из порта 80) или мой модуль apache также может прослушивать другие порты? Если есть более простое решение, пожалуйста, дайте мне знать. Спасибо.


person G.A.    schedule 19.06.2010    source источник


Ответы (2)


Вы можете настроить 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>

Подробнее здесь.

Однако может быть проще прослушивать порт 80 и различать, используя разные пути, например:

<VirtualHost *:80>
    WSGIScriptAlias /normal /path/to/script.wsgi
    WSGIScriptAlias /notifications /path/to/script.wsgi
    WSGIApplicationGroup %{GLOBAL}
    ...
</VirtualHost>
person the_void    schedule 20.06.2010
comment
Спасибо за ответ. Но уведомления не приходят в виде url/notifications. Это обычные сообщения tcp/ip с некоторыми данными (это может быть текстовый файл или файл xml). В сообщениях нет заголовка http. Будет ли строка WSGIScriptAlias ​​/ /path/to/script.wsgi по-прежнему отправлять такие сообщения в script.wsgi ? - person G.A.; 20.06.2010

Поскольку Apache в большинстве конфигураций является веб-сервером с несколькими процессами, вы не можете просто прослушивать отдельный сокет из вашего кода Python, поскольку несколько процессов попытаются сделать то же самое и, таким образом, столкнутся.

Технически вы можете использовать режим демона mod_wsgi для своего WSGI-приложения и запускать его с одним процессом, чтобы избежать проблемы с несколькими процессами, но все равно сомневаетесь, является ли это хорошей идеей, и, вероятно, лучше использовать полностью отдельный процесс, отличный от Apache.

person Graham Dumpleton    schedule 21.06.2010