python - Socketio 事件不会从其他 python 文件发出
问题描述
我正在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 (我的主脚本)中,如下所示:
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。任何建议表示赞赏。
解决方案
socket.on('start fight', function(characters){
console.log(characters)
})
正在侦听,'start fight'
但正在发出战斗事件'start battle'
这在更正后起作用了。
推荐阅读
- javascript - 如何更改 react-responsive-carousel 的 transform:translateX?
- c++ - 如何更新输入文件中的值?例如,输入文件的值为 10。用户如何通过 cin 更改新值?
- ruby-on-rails - 使用 RSpec 测试 Rails 中序列化对象的顺序
- javascript - 通过单击来展开图像(vuetify)
- swift - 协议继承 - 覆盖方法参数
- excel - 如何在 Excel 中使用 Power Query 进行分组运行总计?
- gitlab - Gitlab-CI 有条件地运行 Stage
- interface - 对象类型中的磅符号,在 F# 中
- python - 如何从命令 discord.py 更改变量
- git - Git - 将来自未合并拉取请求的更改显示为我的头分支中未提交的更改