【发布时间】:2021-01-12 20:26:30
【问题描述】:
我正在python中使用socketio和flask构建一个应用程序。
为了维护套接字和房间,我创建了以下类来保存每个连接的用户:
class Socket:
def __init__(self, sid):
self.sid = sid
self.connected = True
self.character = None
def emit(self, event, data):
socketio.emit(event, data, room=self.sid)
这允许我专门向该用户发出事件。这个类暂时在我的server.py中声明(我的主脚本)
在一个单独的文件中,我有以下类:
from __main__ import socketio
from __main__ import Socket
class Battle():
def __init__(self, contestant_one=None, contestant_two=None, room_name=""):
self.contestant_one = contestant_one
self.contestant_two = contestant_two
self.room_name = room_name
def start_battle(self):
if self.contestant_one and self.contestant_two is not None:
self.contestant_one.emit('start battle', JSONEncoder().encode(self.contestant_one.character.__dict__))
上面的类被导入到 server.py(我的 mains 脚本)中,如下所示:
app = Flask(__name__, static_folder="static")
app.config['SECRET_KEY'] = 'vnkdjnfjknfl1232#'
socketio = SocketIO(app)
class Socket:
def __init__(self, sid):
self.sid = sid
self.connected = True
self.character = None
def emit(self, event, data):
socketio.emit(event, data, room=self.sid)
from battle import Battle
注意我是如何在 socketio 和 socket 定义之后导入的?这是根据: Flask socket.io message events in different files
参赛者一和参赛者二都是在 server.py 中定义的套接字对象,并且能够向特定用户发出消息,但在战斗中不会发出事件。我已经在两个客户端浏览器中检查了我设置为侦听该消息的简单日志,但没有任何消息。也没有发生错误。
客户端JS代码:
socket.on('start fight', function(characters){
console.log(characters)
})
我还尝试在 start_battle 方法中使用打印语句对此进行测试,因此我知道代码正在执行,因为打印发生了。
我会提到我是 python 新手,并且在涉及 socketio 时主要使用 node。任何建议表示赞赏。
【问题讨论】:
标签: python websocket import socket.io