Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript pythonsocket.io确认函数_Javascript_Python_Web_Socket.io_Ack - Fatal编程技术网

Javascript pythonsocket.io确认函数

Javascript pythonsocket.io确认函数,javascript,python,web,socket.io,ack,Javascript,Python,Web,Socket.io,Ack,在JS socket.io中,客户端的emit函数中有第三个参数: client.emit("event name",{some:"data"},function myack(value){ }) myack函数被传递到服务器,并使用一些返回值进行调用: //server side: myack("foobar"); ... 但是,我在Python socket.io中没有看到此功能: ack函数能否从客户端JS socket.io

在JS socket.io中,客户端的emit函数中有第三个参数:

client.emit("event name",{some:"data"},function myack(value){
})
myack
函数被传递到服务器,并使用一些返回值进行调用:

//server side:
myack("foobar");
...
但是,我在Python socket.io中没有看到此功能:


ack
函数能否从客户端JS socket.io传递到Python socket.io服务器?应该使用相同的应用程序协议。

是的,您可以查看以下文档:

从这些文件中:

当客户端向服务器发送事件时,它可以选择提供 一个回调函数,作为确认 服务器已处理该事件。而这完全是由 客户端,服务器可以提供要传递的值的列表 返回回调函数,只需从处理程序返回它们 功能:

@sio.event def my_event(sid, data):
    # handle the message
    return "OK", 123
同样,服务器可以请求在客户端处理事件后调用回调函数。这个 socketio.Server.emit()方法有一个可选的回调参数 可以设置为可调用的。如果给出此参数,则可调用的将 在客户端处理事件和任何值后调用 客户端返回的值将作为参数传递到此函数。 在向多个客户端广播时使用回调函数是不可取的 建议这样做,因为回调函数每次调用一次 接收消息的客户端

因此:

#main.py
随机输入
从flask导入flask,从\u目录发送\u
从flask_socketio导入socketio,发射
app=烧瓶(名称)
app.config[“SECRET\u KEY”]=“SECRET!”
socketio=socketio(应用程序)
#为索引页创建路由(http://localhost:5000/)
@附件路线(“/”)
def root():
从_目录(“.”,“index.html”)返回发送_
#开始侦听连接的客户端
@socketio.on(“连接”)
def handle_connect():
打印(“客户端连接”)
#创建一个函数作为确认函数
def ack_随机数_接收(数据):
打印(“客户端收到随机数!”,数据)
#开始监听“某些事件”事件
@socketio.on(“某些事件”)
def处理某些事件():
#创建一个随机数(仅用于演示目的)
随机数=random.randint(0,10)
#在此处注册“回调”函数将充当ack函数
发出(“随机数已拾取”,随机数,回调=确认随机数已接收)
#返回此处将向JS中的ack函数发送数据(本例中为字符串)
返回“来自Python的确认”
如果名称=“\uuuuu main\uuuuuuuu”:
运行(app,debug=True)

我的页面
随机数是:

//连接到服务器 var socket=io(); socket.on('connect',function(){ console.group('Event:connect'); log('Emit“some_event'); emit('some_event',{somedata:123},函数(ack){ console.group('为“某个事件”触发的确认功能'); log('服务器确认了我们的事件,这是响应:',ack); console.groupEnd(); }); console.groupEnd(); }); //倾听事件 socket.on('random_number_picked',函数(newNumber,callback){ //添加一些日志记录 console.group('Event:random_number_picked'); console.log('新的随机数为',newNumber); log('ack函数为',回调); //更新页面的一部分 document.getElementById(“随机数”).innerHTML=newNumber; //调用回调函数向Python发送确认 回调(“来自JS的确认”); console.groupEnd(); });


为了简化Gijs Wobben的回答:

客户端:

sio.emit(“eventname”、数据、函数ackfunc(ackval){
console.log(ackval);
});
服务器端:

def eventname_func(sid,数据):
...
返回ackval#这将在客户端被抛出到ackfunc
sio.on(“eventname”,eventname_func)

我在该文档中没有看到任何确认功能的描述;唯一事件handlers@datdinhquoc,它真的在那里。。无论如何,我已经用一个完整的工作示例更新了我的答案。希望有帮助