Библиотека Python для сервера SOAP, который обрабатывает несколько запросов одновременно? - PullRequest
1 голос
/ 16 февраля 2012

Я ищу библиотеку python для простого создания сервера, который предоставляет веб-службы (SOAP) и может обрабатывать несколько запросов одновременно.

Я пытался использовать ZSI и rcplib, но безуспешно.

Обновление:
Спасибо за ваши ответы. И ZSI, и rcplib (преемник soaplib) реализуют свой собственный Http-сервер. Как интегрировать ZSI / rcplib с библиотеками, которые вы упомянули?

Update2:
После некоторых настроек мне удалось установить и запустить его в Linux, и, похоже, он работает хорошо.
Затем я установил его в Windows после многих неприятных настроек, а затем наткнулся на тот факт, что WSGIDaemonProcess не поддерживается в Windows (также упоминается в документации mod_wsgi). Я все равно пытался запустить его, и он, кажется, работает на каждый запрос асинхронно, но я не уверен, что он будет хорошо работать под давлением.

В любом случае, спасибо ...

Ответы [ 3 ]

1 голос
/ 16 февраля 2012

Вы можете использовать soaplib , чтобы разработать свой сервис мыла. Чтобы предоставить этот сервис другим, вы можете использовать Apache и модуль mod_wsgi. Чтобы установить многопоточность или многопроцессорность, вы можете установить параметр в mod_wsgi

1 голос
/ 17 февраля 2012

Пример Hello World rpclib

Пожалуйста, проверьте это из примера rpclib

# File /home/myhome/test.wsgi
import logging

from rpclib.application import Application
from rpclib.decorator import srpc
from rpclib.interface.wsdl import Wsdl11
from rpclib.protocol.soap import Soap11
from rpclib.service import ServiceBase
from rpclib.model.complex import Iterable
from rpclib.model.primitive import Integer
from rpclib.model.primitive import String
from rpclib.server.wsgi import WsgiApplication

class HelloWorldService(ServiceBase):
    @srpc(String, Integer, _returns=Iterable(String))
    def say_hello(name, times):
        '''
        Docstrings for service methods appear as documentation in the wsdl
        <b>what fun</b>
        @param name the name to say hello to
        @param the number of times to say hello
        @return the completed array
        '''

        for i in xrange(times):
            yield 'Hello, %s' % name

application = WsgiApplication(Application([HelloWorldService], 'rpclib.examples.hello.soap',
                interface=Wsdl11(), in_protocol=Soap11(), out_protocol=Soap11()))

Также измените конфигурацию apache на

WSGIDaemonProcess example processes=5 threads=5
WSGIProcessGroup example

WSGIScriptAlias / /home/myhome/test.wsgi
<Directory /home/myhome/>
Order deny,allow
Allow from all
</Directory>

Согласно вашему требованиюВы можете изменить процессы и потоки.

1 голос
/ 16 февраля 2012

Извините, может быть, я вас не правильно понял.

Я думаю, что вы хотите, чтобы ваш сервер обрабатывал HTTP-запросы параллельно, но тогда вам не нужно думать о вашем коде / библиотеке. Распараллеливание должно выполняться модулем Apache httpd и mod_wsgi / mod_python.

Просто настройте httpd.conf, например, с помощью MaxClients 100, и, например, процессы веб-службы WSGIDaemonProcess = 1 threads = 100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...