上記の2つの答えは正しいです。ただし、スペルサーバーを既に実装していることを考慮して、それを 1 つとして実行します。同じマシン上で別のプロセスとして実行することから始めることができます - at localhost:PORT
. 現時点では、非常に単純なバイナリ プロトコル インターフェースが既にあるようsocket
です。ブロッキング モードで標準ライブラリのインターフェースを使用して、同様に単純な Python クライアントを実装できます。
ただし、twisted.web
単純な Web インターフェイスを試して公開することをお勧めします。JSON を使用してデータをシリアル化および逆シリアル化できます。これは Django で十分にサポートされています。非常に簡単な例を次に示します。
import json
from twisted.web import server, resource
from twisted.python import log
class Root(resource.Resource):
def getChild(self, path, request):
# represents / on your web interface
return self
class WebInterface(resource.Resource):
isLeaf = True
def render_GET(self, request):
log.msg('GOT a GET request.')
# read request.args if you need to process query args
# ... call some internal service and get output ...
return json.dumps(output)
class SpellingSite(server.Site):
def __init__(self, *args, **kwargs):
self.root = Root()
server.Site.__init__(self, self.root, **kwargs)
self.root.putChild('spell', WebInterface())
それを実行するには、次のスケルトン.tac
ファイルを使用できます。
from twisted.application import service, internet
site = SpellingSite()
application = service.Application('WebSpell')
# attach the service to its parent application
service_collection = service.IServiceCollection(application)
internet.TCPServer(PORT, site).setServiceParent(service_collection)
サービスを別のファースト クラス サービスとして実行すると、必要に応じて別のマシンでいつでも実行できます。Web インターフェースを公開すると、リバース プロキシ ロード バランサーの背後でも簡単に水平方向にスケーリングできます。