在使用 python-socketio
和 Flask-SocketIO
进行实时通信时,如果遇到发送数据但无法接收的问题,可能是由于多种原因造成的。以下是一些基础概念、可能的原因、解决方案以及示例代码。
python-socketio
和 Flask-SocketIO
的版本兼容。socketio.start_background_task
来处理长时间运行的任务。以下是一个完整的示例,展示了如何在客户端和服务器之间进行基本的 Socket.IO 通信:
服务器端 (server.py
):
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('my_event')
def handle_my_event(data):
print('Received event:', data)
socketio.emit('response', {'data': 'Hello from server'})
if __name__ == '__main__':
socketio.run(app, debug=True)
客户端 (client.py
):
import socketio
sio = socketio.Client()
@sio.on('connect')
def on_connect():
print('Connected to server')
sio.emit('my_event', {'data': 'Hello from client'})
@sio.on('response')
def on_response(data):
print('Received response:', data)
sio.connect('http://localhost:5000')
sio.wait()
HTML模板 (templates/index.html
):
<!DOCTYPE html>
<html>
<head>
<title>Socket.IO Test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
socket.emit('my_event', {data: 'Hello from client'});
});
socket.on('response', function(data) {
console.log('Received response:', data);
});
</script>
</head>
<body>
<h1>Socket.IO Test</h1>
</body>
</html>
通过以上步骤和示例代码,你应该能够解决 python-socketio
和 Flask-SocketIO
之间的通信问题。如果问题仍然存在,请检查网络配置和防火墙设置,确保没有阻止 WebSocket 连接。
领取专属 10元无门槛券
手把手带您无忧上云