0

Websocket を使用してクライアント/サーバー アプリを作成しようとしています。Autobahn websocket を通信媒体として使用することを考えています。クライアントはサーバーにコマンドを送信してタスクを実行し、サーバーからの一連の進行状況の応答を待ちます。サーバーでは、クライアントからコマンドを受け取った後、一連のタスクを実行してから、クライアントに self.sendMessage ("percent completed") % (percent) を呼び出します。私が遭遇した問題は、sendMessage がすべてのメッセージをバッファリングし、最後に一度に送信したように見えることです。この問題を解決する方法について何か考えはありますか? 以下は、websocket/example/echo/server.py のコード スニペットです。

import sys 
import time

from twisted.internet import reactor
from twisted.python import log 
from twisted.web.server import Site
from twisted.web.static import File

from autobahn.websocket import WebSocketServerFactory, \
                               WebSocketServerProtocol, \
                               listenWS

class EchoServerProtocol(WebSocketServerProtocol):

   def onMessage(self, msg, binary):
      self.sendMessage("server respond message 1", binary)
      time.sleep (2) 
      self.sendMessage("server response message 2", binary)
      time.sleep (2) 
      self.sendMessage("server response message 3", binary)

私は、クライアントがサーバーから 2 秒ごとにメッセージを受信することを期待しています。代わりに、3 つのメッセージすべてを一度に取得します。

4

2 に答える 2

0

time.sleepTwisted リアクターをブロックします。それは(ほとんど)決して良い考えではありません。Twisted はreactor.callLater、ブロックしない方法で遅延する必要があります。

Autobahn がすぐにメッセージを送信することを確認するために、ここで例をチェックアウトできます。

于 2013-10-09T08:00:56.737 に答える