0

40 のクライアントから TCP で 1 秒あたり 10 件のメッセージ (合計アクティビティ) が着信しています。各メッセージを取得し、5 秒のプロセスを実行する必要があります (Web サービスを検索し、DB クエリを実行し、最終的に結果を DB に書き込みます)。

5 秒の遅いプロセスから入ってくるメッセージをどのように分離すればよいですか? また、クライアントへのメッセージをすでに処理しているときに、そのクライアントから別のメッセージを受け取ることもあります。私は決してメッセージを失いたくありません。

4

2 に答える 2

1

Twisted での答えは、やりたいことを単純に実行することです。

from twisted.python.log import err
from twisted.internet.protocol import Protocol

class YourProtocol(Protocol):
    ...
    def messageReceived(self, message):
        d = lookupWebService(message)
        d.addCallback(queryDatabase)
        d.addCallback(saveResults)
        d.addErrback(err, "Servicing %r failed" % (message,))

Web サービスとやり取りするための API は にありますtwisted.web.client(「Web サービス」とは、HTTP クライアントを使用して対話するものであると仮定します)。一部の SQL データベース サーバーと対話するための API は、 にありますtwisted.enterprise.adbapi。少しグーグルで調べるだけで、他の種類のデータベースと対話するための API を見つけることができます。

于 2013-08-10T19:11:24.450 に答える
0

Divide and Conqueurを使用してタスクを並行して分散します。

このアプローチを示す Python の例がたくさんあります。こちらを参照してください。

ここに画像の説明を入力

ROUTER/DEALER プロキシを使用してタスクを分散することもできます。プロキシに到着したメッセージはフェア キューに入れられ、ダウンストリーム ワーカー間で分散されます。このアプローチは、ニーズにより適している場合があります。

ここに画像の説明を入力

于 2013-08-10T15:01:15.437 に答える