前几篇文章实现了对物理机、虚拟机以及Kubernetes中Pod的WebSSH操作,可以方便的在web端对系统进行管理,同时也支持对所有操作进行全程录像,以方便后续的查看与审计
这一篇文章接着实现一个看起来很炫酷,但实际上你可能不会经常使用,又必须要存在的功能:实时监控用户操作,在必要的时候将用户踢下线
实时查看操作
django通过channels实现websocket中有一个非常重要的概念叫layer,layer可以将多个channel合并成一个group,我们可以发送消息给group,那么group里的每个channel都能收到
关于Channel我有写过两篇文章结合聊天室和web端实现tail-f功能这两个案例来详细介绍,两篇文章是『Django使用Channels实现WebSocket--上篇』和『Django使用Channels实现WebSocket--下篇』,对上边提到的名词一脸懵逼的朋友可以通过这两篇文章来学习
之前的WebSSH仅是单连接,只需要客户端和服务器建立长连接,然后处理指令就ok了,我们并没有启用channel的layer,实际上也可以看作是单channel,但要实现监控的功能,就需要将操作者和管理员(监控者)的多个channel合并在一起组成一个group,这样操作者的所有操作都可以发送给这个group,同处于这个group内监控者就能实时收到消息了,大概流程变化如下图所示
接下来看下具体实现,以下所有代码均是在这篇文章的基础上进行说明讲解:『Django实现WebSSH操作物理机或虚拟机』
首先我们要启用layer,这个需要在settings.py中添加如下配置
CHANNEL_LAYERS = {