WebSSH进阶之实时监控和强制下线,互联网公司面试流程&面试技巧

is_connecting=True

)

async_to_sync(self.channel_layer.group_add)(

self.group_name,

self.channel_name

)

self.accept()

WebSocket连接成功后,连接ssh

self.ssh = SSHBridge(self.therecord, websocket=self)

self.ssh.connect(**ssh_connect_args)

def disconnect(self, close_code):

将连接状态置为False

self.therecord.is_connecting = False

self.therecord.save()

async_to_sync(self.channel_layer.group_discard)(

self.group_name,

self.channel_name

)

self.ssh.close()

def receive(self, text_data=None):

text_data = json.loads(text_data)

if text_data.get(‘flag’) == ‘resize’:

self.ssh.resize_pty(cols=text_data[‘cols’], rows=text_data[‘rows’])

else:

self.ssh.shell(data=text_data.get(‘data’, ‘’))

def ssh_message(self, event):

self.send(text_data=json.dumps(

event[‘message’]

))

在connect连接建立时新建一条记录,存储主机、用户、group_namechannel_name以及初始窗口的colsrows信息,同时标记is_connecting为True,这里的group_name命名与文章『堡垒机的核心武器:WebSSH录像实现』中我们定义的录像文件名规则一致,另外将这篇文章中新建录像记录的操作从SSHBridge.record中给转到了连接建立的connect中来,更合理也更方便

在disconnect连接关闭时,将is_connecting标记为False,这样我们在前端页面上就可以根据这个标记来判断WebSSH是否正在连接,如果连接则展示监控强制结束按钮,否则展示播放命令提取按钮

同时添加个ssh_message方法,用来接收发送到组的数据

到这里,我们已经将WebSSH改造成了支持layer的模式,那么接下来就是要在用户点击监控的时候将用户与服务端建立的连接channel加入到上述group中

新建一个名为MonitorConsumer的consumer,主要用来处理监控连接

class MonitorConsumer(WebsocketConsumer):

def connect(self):

pk = self.scope[‘url_route’][‘kwargs’].get(‘id’)

self.group_name = Record.objects.get(id=pk).group

async_to_sync(self.channel_layer.group_add)(

self.group_name,

self.channel_name

)

self.accept()

判断用户已经结束了这个webssh连接时就关闭监控

self.connecting = Record.objects.get(id=pk).is_connecting

if not self.connecting:

self.close()

def disconnect(self, close_code):

async_to_sync(self.channel_layer.group_discard)(

self.group_name,

self.channel_name

)

self.close()

def receive(self, text_data=None):

pass

def ssh_message(self, event):

self.send(text_data=json.dumps(

event[‘message’]

))

MonitorConsumer与SSHConsumer有两个地方不一样,其一是SSHConsumer中我们直接新生成了个group_name,而MonitorConsumer中需要在connect时获取到要监控的ID,然后通过ID拿到group_name,将monitor连接加入到这个group,其二是监控只能看,不能操作,所以也不需要前端发送数据的term.on和Consumer的receive处理数据

最后需要修改SSHBridge方法中发送给websocket的指令,从self.websocket.send改为发送到group的模式,如下

async_to_sync(self.websocket.channel_layer.group_send)(

self.group_name,

{

‘type’: ‘ssh.message’,

‘message’: message

}

)

至此,监控功能就算完成了,什么?前端页面怎么弄?参考下之前的WebSSH界面,几乎可以完全复制

踢用户下线


自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。

写在最后

最后,对所以做Java的朋友提几点建议,也是我的个人心得:

  1. 疯狂编程

  2. 学习效果可视化

  3. 写博客

  4. 阅读优秀代码

  5. 心态调整

里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。

写在最后

最后,对所以做Java的朋友提几点建议,也是我的个人心得:

  1. 疯狂编程

  2. 学习效果可视化

  3. 写博客

  4. 阅读优秀代码

  5. 心态调整

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值