[英]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.