如何在 Flask-SocketIO 中向测试客户端推送通知?

Posted

技术标签:

【中文标题】如何在 Flask-SocketIO 中向测试客户端推送通知?【英文标题】:How to push notifications to Test Client in Flask-SocketIO? 【发布时间】:2016-12-10 22:32:56 【问题描述】:

我正在尝试作为客户端接收来自服务器的推送;使用我的测试客户端如下:

客户:

socket_client = socketio.test_client(app)
@socketio.on('hit_client')
def recieve_message(json_data):
    print("Server has called!")

服务器:

socketio.emit('hit_client', 'Hi Client!')

服务器应该正在推送和调用hit_client 频道,但这并没有被触发。但是,socket_client.get_received() 具有发出的数据。我认为 WebSockets 的全部意义在于双向通信(即推送函数触发器)!

这是一个非常简单的设置,它甚至似乎都不起作用...任何帮助都将非常感激。几个小时以来我一直在摇头。

【问题讨论】:

【参考方案1】:

测试客户端不是 Socket.IO 客户端。它的唯一目的是帮助您为 Socket.IO 服务器编写单元测试。它在概念上类似于 Flask 的 HTTP 路由测试客户端。只有在单元测试中使用它才有意义。

当服务器向客户端发出某些内容时,测试客户端只会将其存储并通过get_received 调用使其在您的测试代码中可访问。它不会触发任何事件,因为这不是它的预期目的。

如果你想在 python 中实现一个 Socket.IO 客户端,有一个包:https://pypi.python.org/pypi/socketIO-client。通过这个包,你可以编写一个 Python 脚本连接到 Socket.IO 服务器并可以发送和接收事件。

【讨论】:

谢谢米格尔。非常感谢您的回复!

以上是关于如何在 Flask-SocketIO 中向测试客户端推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask-socketio 和 socketIO 客户端

[翻译] flask-SocketIO

使用 pytest 测试 flask-socketio 服务器发出的事件时出错

Python Flask-socketio 工作,没有从 JS 客户端接收数据

个人技术总结——flask-socketio框架

解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)