flask socketio 无法向客户端推送消息

2022-07-13 15:24:14 +08:00
 zhishixiang

这是客户端:

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
tokenList = {}


@app.route("/test")
def testConnect():
    sid = tokenList["114514"]
    print(sid)
    emit('newMission', {'from': 'server'}, namespace="newMission", to=sid)
    return 'success'


@socketio.on('register')
def register(data):
    print("服务器%s 尝试注册" % data["secret"])
    emit('register', {"token": "1919810"})
    print("注册成功,token 为%s" % "1919810")
    sid = request.sid
    join_room("mainRoom")
    tokenList["114514"] = sid


"""@socketio.on('message')
def message(data):
    print(data)  # {'from': 'client'}
    emit('response', {'from': 'server'})
    sleep(5)
    emit('response', "exit")"""

if __name__ == '__main__':
    socketio.run(app, debug=True, host='127.0.0.1', port=8090)

这是服务端:

import socketio

sio = socketio.Client()


@sio.event()
def connect():
    print('正在注册,请稍后')
    sio.emit('register', {'secret': '114514'})


@sio.on('register')
def isReg(data):
    print("注册成功,当前 token 为" + data["token"])


@sio.on("newMission", namespace="message")
def newMission(data):
    print(data)


sio.connect('ws://localhost:8090')
sio.wait()

预计是打算让服务端获取客户端的 sid ,然后通过 sid 推送消息,但是不知道为什么客户端死活无法收到消息,查了很久也不知道哪里写错了,求助万能的 v 友

2282 次点击
所在节点    Python
24 条回复
zhishixiang
2022-07-14 19:12:36 +08:00
@zoofy 我看错了不好意思
zhishixiang
2022-07-14 19:14:21 +08:00
@zoofy 确实可以用了,我测试时运行了我自己的代码导致出错,感谢大佬帮助
zhishixiang
2022-07-14 21:21:31 +08:00
@zoofy 还有个问题:怎么检测客户端断开链接并移除房价以及打印日志
zoofy
2022-07-15 11:48:07 +08:00
@zhishixiang 感觉可以在注册的时候记录好 request.sid 和 request namespace sid 两个 id, 在服务端监听 disconnect 方法,获取到 request.sid 后拿到对应保存的 namespace sid, 然后再做 close room 或者 leave room 操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX