0

pythonで簡単なGUIチャットプログラムを作っています

サーバーコールコールバック関数から:

def broadcast(self, msg):
    with lock:
        print("bloadcast calls")
        global callbacks
        global buf
        for user, callback in callbacks.items():
            if user not in buf or buf[user] == None:
                buf[user] = (msg,)
            else:
                buf[user] = buf[user] + (msg,)
            callback()

コールバック関数はクライアント シグナルを送信します

service.root.accept(idt, chat.update.update.emit)

サーバーの受け入れ機能で

callbacks[idt] = rpyc.async(callback)

これです

class Updater(QObject):
    update = pyqtSignal()

私のクライアントクラスでは

self.update = Updater()
self.update.update.connect(self.listen)

そしてlistenメソッドは

def listen(self):
    msg = self.service.root.get_buf(self.idt)//get server's message by call server's function
    for m in msg:
        self.log.append(m)

そのため、サーバーはコールバック関数を呼び出し、クライアントで GUI ウィジェットを更新するシグナルを生成します

クライアントが 1 つの場合は、うまく機能します。ただし、クライアント A とクライアント B など、複数のクライアントがある場合、A -message-> サーバーとサーバーは A の GUI ウィジェットのみを更新します。B のコールバックは、B がサーバーにメッセージを送信するまでブロックされます。割り込み呼び出しのように、クライアントの GUI 更新呼び出しをすぐに実行したい

どうやってやるの?

4

1 に答える 1

1

1行追加するだけ

rpyc.BgServingThread(service)#service is rpyc connection
于 2015-05-25T08:50:50.140 に答える