如何使用 Flask 为游戏腾出空间?

How to make rooms for game with Flask?

我在服务器上使用 Flask-SocketIO,在 PC 上使用 socketIO-client。 PC端启动应用后,发送获取房间密码的请求:

socketIO = SocketIO('192.168.43.217', 8080)

def get_code(code):
    submit_code = code
    print('code =', code)


socketIO.emit('new_room')
socketIO.on('get_code', get_code)
socketIO.wait()

服务器发送代码:

@socketio.on('new_room')
def new_room():

    code = randint(1000, 9999)

    db.session.add(Rooms(code))
    db.session.commit()
    emit('get_code', code)

我在用户的后面添加了 socketio.emit('new_user', current_user.name),该代码将名称发送到 PC 客户端。

但是如果我创建两个或更多房间,我明白了,同一个用户登录了不同的房间。

我怎样才能做出类似 socketio.emit('new_user', current_user.name, namespace=f'/{room_code}') 的东西? 那只会发射到正确的房间。

或者这个方法不对? 之后,游戏开始,PC客户端会显示答案,玩家会从PC上得到一些答案,然后像这样发回:

1)服务器生成代码,返回电脑

2) 另一台设备的人输入代码、他的昵称并连接

3) 他出现在房间里

4)连接的电脑出现一条记录

5)游戏开始,任务显示

6) 电话有接听选项

7) 电脑显示谁回答了,好吧,那已经是纯游戏逻辑了。积分计算等

生成房间后,应通过调用将客户端添加到其中:

from flask_socketio import enter_room

@socketio.on('new_room')
def new_room():

    code = randint(1000, 9999)
    enter_room(str(code))

    db.session.add(Rooms(code))
    db.session.commit()
    emit('get_code', code)

然后您可以通过以下方式向此房间中的用户发送事件:

socketio.emit('new_user', current_user.name, room=str(room_code))