我正在开发一款多人网页游戏,该游戏使用 Flask-SocketIO 在服务器和客户端之间进行实时通信。但是,我面临一个问题,Python 代码可以成功向客户端发送数据,但无法接收 JavaScript 代码的任何发射。另一方面,JavaScript 代码可以从服务器接收数据,但无法发回任何发射。
对于错误的代码或愚蠢的错误,我提前表示歉意,我是套接字新手,并不完全理解它们。
以下是问题摘要:
我尝试从我的 Flask 服务器和 JavaScript 来回发送实时玩家位置数据。套接字成功连接,初始用户数据发送到客户端,然后客户端尝试发送回数据,没有报告错误,但是我的Python代码中的socket.on()函数上的代码确实被执行了。
预期行为
实际行为
Javascript:
var players = {};
var socket = io('/game');
socket.on('connect', () => {
console.log('Connected to server.');
});
socket.on('player_data', function(updatedPlayers) {
console.log("Updated players data:");
players = updatedPlayers;
console.log(players);
});
var player_id = generateUserId(Object.keys(players));
function send_player_data(id, x, y) {
console.log("Sending player data: " + id + " " + x + " " + y);
socket.emit('player_data', {
id: id,
x: x,
y: y
});
}
send_player_data(id, x, y)
Javascript 输出:
8game.js:116 Sending player data: 737510 768 662
game.js:108 Updated players data:
game.js:110 {}
game.js:104 Connected to server.
171game.js:116 Sending player data: 737510 768 662
Python代码:
@app.route('/game', methods=['GET', 'POST'])
def game():
return render_template('game.html')
socketio = SocketIO(app, max_http_buffer_size=1000000)
players = {}
@socketio.on('connect', namespace='/game')
def handle_connect():
print('Client connected')
emit('player_data', players)
@socketio.on('disconnect', namespace='/game')
def handle_disconnect():
print('Client disconnected')
@socketio.on('player_data', namespace='/game')
def handle_player_data(data):
print('Player state update:', data)
player_id = data['id']
player_x = data['x']
player_y = data['y']
active = True
players[player_id] = {"x": player_x, "y": player_y, "active": active}
emit('player_data', players, broadcast=True)
Python 输出(这显然让我的控制台充满了重复,所以这里是一个片段):
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:20] "POST /socket.io/?EIO=4&transport=polling&t=OucF7WY&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:20] "POST /socket.io/?EIO=4&transport=polling&t=OucF7XQ&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:20] "POST /socket.io/?EIO=4&transport=polling&t=OucF7YI&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:20] "POST /socket.io/?EIO=4&transport=polling&t=OucF7ZA&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:20] "POST /socket.io/?EIO=4&transport=polling&t=OucF7a9&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:21] "POST /socket.io/?EIO=4&transport=polling&t=OucF7bb&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
INFO:werkzeug:127.0.0.1 - - [10/Mar/2024 02:41:21] "POST /socket.io/?EIO=4&transport=polling&t=OucF7eW&sid=ezy6IQ_nADGehX0LAAAC HTTP/1.1" 200 -
简单的解决方案,代码是正确的,但是我在 github 代码空间上运行它,而不是将其推送到我的服务器。当我推送到服务器时问题就解决了。