gpt4 book ai didi

python - flask 中的 Socket.io : Data from external source

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:26 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,需要在浏览器上持续显示后端正在进行的操作。我一直在尝试在 Flask 中使用 socket.io。但是我需要从我项目中的其他 Python 模块获取要显示的数据。因此,我尝试在 Flask 和外部模块之间建立套接字连接,我将从中获取数据以显示在浏览器上(没有任何延迟)。

@socketio.on('my event')
def server(message):
s = socket.socket()
print "Socket successfully created"
port = 12345
s.bind(('', port))
print "socket binded to %s" %(port)
s.listen(5)
print "socket is listening"
while True:
c, addr = s.accept()
print 'Got connection from', addr
print c.recv(1024)
emit('my response', {'data': c.recv(1024)})
c.close()

print c.recv(1024) 正在控制台上打印数据。但是相同的数据并没有反射(reflect)在浏览器上。它抛出了这个错误 -

error: [Errno 98] Address already in use

这意味着它在 print c.recv(1024) 之后的 emit 处失败。可能出了什么问题?我的第一个疑问是是否允许这种连接。我的意思是,我们可以在 Flask 的 socket.io 中创建套接字连接吗?否则,使用 Flask 在浏览器上连续显示后端操作的最佳解决方案是什么?我也有 Django 的 Web 应用程序。对于我使用 Flask 或 Django 的用例的任何解决方案都将不胜感激(最好是 Django)。

最佳答案

使用 Miguel 给出的答案,我可以找到合适的解决方案。在外部脚本中,我们需要创建一个 SocketIO对象如下:

socketio = SocketIO(message_queue='redis://')

然后我可以使用emit发送前端显示的数据。

def fn():
socketio.emit('my response', {'data': 'ur data goes here'})

fn()

在前端,

var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
socket.on('my response', function(msg) {
$('#log').append('<p>Received: ' + msg.data + '</p>');
document.getElementById('<div_id>').innerHTML += msg.data + "<br>";
});
});

最后,在 Flask 服务器端,我们需要创建 SocketIO对象如下:

socketio = SocketIO(app, message_queue='redis://')

然后使用 socketio.run(app,host='<ip>',port=<port>) 运行 Flask

关于python - flask 中的 Socket.io : Data from external source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45612788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com