使用Flask SocketIO实现WebSocket

使用 HTML 5 的 WebSocket 实现实时交互通信功能,替代 Ajax 轮训等方法,个人觉得比较适合实时监控类网站。我就尝试使用 Flask-SocketIO 实现支持 WebSocket 的服务器端,使用 socket.io 库实现客户端。

一个简单的 Flask-SocketIO 应用

仅完成就简单的通讯功能。

服务器端

使用 HTML 5 的 WebSocket 实现实时交互通信功能,替代 Ajax 轮训等方法,个人觉得比较适合实时监控类网站。我就尝试使用 Flask-SocketIO 实现支持 WebSocket 的服务器端,使用 socket.io 库实现客户端。

一个简单的 Flask-SocketIO 应用
仅完成就简单的通讯功能。

服务器端

创建 Flask-SocketIO 应用的方法与 Flask 应用相似

开发时简单运行的方法也与不同的 Flask 应用相同。

SocketIO 使用 event 表示客户端和服务端接受到的消息。后面可以看到,客户端使用 Javascript 回调函数处理。服务器端使用类似视图的路由注册函数来处理事件。

客户端
使用 socket.io 的客户端 js 库

监听 socket 事件的 js 代码:

当 socket 连接成功时,向服务器发送 my event 事件,上一节的服务端使用 test_message 函数处理 my event 事件,向客户端发送 my response 事件。

下面看一个稍微复杂一些的应用,实现一个有实际价值的功能。

一个简单的实时监控应用
单位服务器使用 LoadLeveler 管理任务调度,绝大部分作业脚本都会提交到 LoadLeveler 上运行,很多时候需要运维使用 llq 命令查看 LoadLeveler 队列中的任务状态。或许可以开发一种可以实时获取信息的工具,以更直观的方式展示数据。

从最简单入手,实时获取 LoadLeveler 队列中任务数量和每种状态的任务数量。

数据生成
一个典型的 llq 输出如下:

149 job step(s) in queue, 57 waiting, 0 pending, 92 running, 0 held, 0 preempted
其中…表示省略的条目。上述要求其实就是解析 llq 输出的最后一行,使用正则表达式解析。

另外,该程序不在单位的服务器上运行,需要用 ssh 连接到服务器。我使用 paramiko 库执行远程命令。

如此可以得到数据。

应用结构
socket 服务器接受外界传来的 llq 队列消息,并将该消息发送给连接到 socket 服务器的所有客户端。因为对 socket 不够了解,我还是使用传统的 HTTP 方式传送消息到服务器,再使用 Flask-SocketIO 发送消息到客户端。

服务器端
添加一个 http 路由函数,Flask-SocketIO 对象可以使用 emit 函数直接向客户端发送消息。

数据收集
每隔一段时间收集一次数据:

客户端
接受数据后,更新界面显示

创建 Flask-SocketIO 应用的方法与 Flask 应用相似

开发时简单运行的方法也与不同的 Flask 应用相同。

SocketIO 使用 event 表示客户端和服务端接受到的消息。后面可以看到,客户端使用 Javascript 回调函数处理。服务器端使用类似视图的路由注册函数来处理事件。

客户端

使用 socket.io 的客户端 js 库

监听 socket 事件的 js 代码:

当 socket 连接成功时,向服务器发送 my event 事件,上一节的服务端使用 test_message 函数处理 my event 事件,向客户端发送 my response 事件。

下面看一个稍微复杂一些的应用,实现一个有实际价值的功能。

一个简单的实时监控应用

单位服务器使用 LoadLeveler 管理任务调度,绝大部分作业脚本都会提交到 LoadLeveler 上运行,很多时候需要运维使用 llq 命令查看 LoadLeveler 队列中的任务状态。或许可以开发一种可以实时获取信息的工具,以更直观的方式展示数据。

从最简单入手,实时获取 LoadLeveler 队列中任务数量和每种状态的任务数量。

数据生成

一个典型的 llq 输出如下:

其中…表示省略的条目。上述要求其实就是解析 llq 输出的最后一行,使用正则表达式解析。

另外,该程序不在单位的服务器上运行,需要用 ssh 连接到服务器。我使用 paramiko 库执行远程命令。

如此可以得到数据。

应用结构

socket 服务器接受外界传来的 llq 队列消息,并将该消息发送给连接到 socket 服务器的所有客户端。因为对 socket 不够了解,我还是使用传统的 HTTP 方式传送消息到服务器,再使用 Flask-SocketIO 发送消息到客户端。

服务器端

添加一个 http 路由函数,Flask-SocketIO 对象可以使用 emit 函数直接向客户端发送消息

数据收集

每隔一段时间收集一次数据:

客户端

接受数据后,更新界面显示

使用Flask SocketIO实现WebSocket 实时计算-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客



HTTPX 基础教程-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客