簡體   English   中英

socketIO-client python回調未收到參數

[英]socketIO-client python callback not receiving args

我向燒瓶服務器發送命令(文件)。 它通過發出響應來響應,作為自變量,為字典提供了所請求的文件名。

from socketIO_client import SocketIO, LoggingNamespace, BaseNamespace


def on_data_command_response(*args):
    print('on_data_command_response')
    print(len(args))
    print("-----------")


with SocketIO("192.168.1.164", 5000, LoggingNamespace) as socketIO:

    socketIO.on('data command response', on_data_command_response)

    socketIO.emit('data event', {'command': 'files'}, on_data_command_response)
    socketIO.emit('data event', {'command': 'files'}, on_data_command_response)

    socketIO.wait_for_callbacks(seconds=5)

在flask中,命令的接收方式為:

@socketio.on('data event')
def data_event(json, methods=['GET', 'POST']):
    print('received data command: {}'.format(json))

並發送響應:

def emit_data_command_response(payload_json):
    socketio.emit('data command response', payload_json, callback=messageReceived)

問題:發射似乎被接收了兩次。 對於我發送的每個命令,一次使用args,一次不使用。

on_data_command_response
2
-----------
on_data_command_response
0
-----------
on_data_command_response
2
-----------
on_data_command_response
0
-----------

變化1:

socketIO.on('data command response', on_data_command_response)


socketIO.emit('data event', {'command': 'files'}, on_data_command_response)
socketIO.emit('data event', {'command': 'files'})
socketIO.emit('data event', {'command': 'files'})
socketIO.emit('data event', {'command': 'files'})

退貨

on_data_command_response
2
-----------
on_data_command_response
0
-----------
on_data_command_response
2
-----------
on_data_command_response
2
-----------
on_data_command_response
2
-----------

但是版本2(我認為這看起來是最合邏輯的):

socketIO.on('data command response', on_data_command_response)
socketIO.emit('data event', {'command': 'files'})

on_data_command_response甚至沒有被調用。

我不明白我在做什么錯。 對使用args調用一次回調“ on_data_command_response”有幫助嗎?

問題是我混淆了回調和發出。 ->回調是服務器“返回”發出命令時。 -> socketIO.on ....指導服務器何時進行發射。 socketIO.wait(seconds = 1)->等待回調。 因此,如果未提供回調函數,則它不會執行任何操作。

https://pypi.org/project/socketIO-client/

一個客戶:

import time
from socketIO_client import SocketIO, LoggingNamespace, BaseNamespace


def on_data_command_response(*args):
    if len(args) > 0:
        print(len(args))
        # print('on_data_command_response')
        # for arg in args[0]:
           # print((arg)) 
    else:
        print("no args received.")
    # return # send acknowledgement

def message_received_by_servercallback(*args):
    print("----all good----")

def on_disconnect():
    print("lode disconnect")



with SocketIO("192.168.1.164", 5000, LoggingNamespace) as socketIO:

    socketIO.on('disconnect', on_disconnect)

    socketIO.on('data command response', on_data_command_response)

    socketIO.emit('backend event', {'command': 'files'}, message_received_by_servercallback)

    socketIO.wait_for_callbacks(seconds=1)

與服務器:

@socketio.on('backend event')
def backend_request(json):
    if "command" in json.keys():  
        if json["command"] == "files":
            response_json = {}
            response_json["status"] = "download files"

    payload_json = response_json
    socketio.emit('data command response', payload_json, callback=messageReceived)
    return ["received"] # will trigger the callback

執行預期(客戶端):

2
----all good----
lode disconnect
>>>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM