pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys
from PySide6 import QtGui
from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件,可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI()def initUI(self):# 设置窗口的所在位置,以左上角为原点,x轴300, y轴300, 宽250, 长150self.setGeometry(300, 300, 250, 150)# 给窗口一个标题名,你将会在标题栏看到这个名字self.setWindowTitle('Message box')def closeEvent(self, event):# message为窗口标题# Are you sure to quit?窗口显示内容# QtGui.QMessageBox.Yes | QtGui.QMessageBox.No窗口按钮部件# QtGui.QMessageBox.No默认焦点停留在NO上reply = QMessageBox.question(self, 'Message',"Are you sure to quit?",QMessageBox.Yes |QMessageBox.No,QMessageBox.No)# 判断返回结果处理相应事项if reply == QMessageBox.Yes:event.accept()else:event.ignore()def main():# 创建qt的主应用app = QApplication(sys.argv)# 实例化自己写的类ex = Message()ex.show()# 应用关闭时返回0,sys关闭进程sys.exit(app.exec_())if __name__ == '__main__':main()

原因:sock断开的问题

存在的问题:

效果

通过抓包来验证猜想:

sock 在客户端进程关闭的时候,没有资源释放会导致服务端怎么样?

看下文心的解释:

当客户端进程关闭而其占用的 socket 资源没有正确释放时,这可能会对服务端产生以下影响:资源泄露:服务端可能继续为已关闭的客户端连接保留资源,如文件描述符、内存等。如果这种情况频繁发生,随着时间的推移,这些未释放的资源可能会累积,最终导致服务端资源耗尽。
性能下降:服务端需要管理更多的“僵尸”连接,这可能会增加其处理开销,导致性能下降。
连接限制:大多数操作系统都有限制单个进程可以打开的文件描述符数量。如果客户端不释放 socket,服务端可能会达到这个限制,无法接受新的连接。
错误处理:服务端可能需要实现额外的逻辑来检测和处理这些“僵尸”连接,增加了复杂性和潜在的错误风险。
不稳定性和崩溃:在极端情况下,如果资源泄露足够严重,服务端进程可能会变得不稳定,甚至崩溃。
为了避免这些问题,建议:正确关闭连接:确保客户端在关闭时正确关闭和释放所有 socket 资源。
服务端检测:在服务端实现心跳检测或其他机制,以识别和关闭不活动的或已关闭的客户端连接。
资源限制:设置合理的资源限制,如文件描述符的数量,并在达到限制时采取适当的行动,如拒绝新的连接或关闭最旧的连接。
日志和监控:实现日志记录和监控机制,以便及时发现和处理资源泄露问题。

进行实验测试:

1、服务器是telnet,将telnet 服务器设置为单链接状态

2、客户端使用自己写的telnet 进行连接,但是关闭主窗口的时候,不进行telnet sock的释放。

3、预测结果,telnet客户端关闭后,telnet服务器无法在进行登录,但是使用wireshark抓包可以看到tcp/ip连接的发起。

一、第一次正常的连接抓包显示,是正常的登录和交互:

二、对客户端进行不释放任何资源的关闭:

可以观察到 抓包软件中是没有任何报文交互的,没有tcp的四次挥手离开。这样对于telnet的服务来说,客户端是凭空消失了,并且服务器不知道客户端已经消失了。

三、在次发起telnet 客户端的连接,查看报文交互

在客户端断开一段时间后,tcp./ip进行了交互

四、在重复一下实验,在tcp没有自挥手前,进行tcp的连接

此时连接就会出现问题

五、等待一下,需要多久 telnet服务器可以恢复过来。

目前实验结果是符合猜想的,现在停止连接连接的过程,查看服务器主动释放在什么时候。

在大概四分钟的时候,服务器主动进行了资源的释放

接下来:需要查看telent服务器的设计,进行一个问题的总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基本语法与变量的相关介绍

python基本语法与变量 python语句的缩进 Python代码块使用缩进对齐表示代码逻辑,Python每段代码块缩进的空白数量可以任意,但要确保同段代码块语句必须包含相同的缩进空白数量。建议在代码块的每个缩进层次使用单个制表符或两个空格或四个空格 , 切记不…

flutter使用get库管理路由,并设页面跳转动画和常见动画

get库还是非常强大的一个仓库,里面包含了非常常用的一些方法,比如路由管理,这是最常见和最常用的一个功能了,我们可以先配置一个路由对象,然后在里面配置路由列表,并且设置路由跳转方式。 第一种方式&…

教师资格证照片分辨率怎么调?教师资格证上传照片要求

最近教师资格证考试开始报名了,在报名之前需要准备好一些必备的材料,比如证件照片,报名考试平台一般都会对上传的证件照有具体的要求,比如考生本人近6个月以内的免冠正面证件照;照片格式及大小:JPG/JPEG格式…

Springboot读取配置文件

多种配置文件格式 springboot项目中不同配置文件的优先加载顺序 为:properties> yml >yaml>自定义核心类配置 自定义配置文件的加载 一般系统会加载默认的application.properties或者application.yml,但如果使用自定义配置文件,可使用下面方…

SpringSecurity入门demo(二)表单认证

上一篇博客集成 Spring Security,使用其默认生效的 HTTP 基本认证保护 URL 资源,下面使用表单认证来保护 URL 资源。 一、默认表单认证: 代码改动:自定义WebSecurityConfig配置类 package com.security.demo.config; import or…

Next.js 集成 Auth0 登入和自定义登入页面

Next.js 集成 Auth0 和自定义登入页面 注册账号和基本配置进入 auth0 官网注册账号并登入进入控制台后访问 Applications/Applications进入程序配置页面添加配置 在 Next.js 使用在项目中集成 通过 Auth0Lock 配置方式自定义登入页面效果展示实现过程 注册账号和基本配置 进入…

scroll-view在小程序页面里实现滚动,uniapp项目

要实现红框中的区域进行滚动,scroll-view必须写高 <template><!-- 合同-待确认 --><view class"viewport"><!-- 上 --><view class"top-box"><!-- tab --><view class"tabs"><textv-for"(ite…

Alibaba-> EasyExcel 整理3

1 导入依赖 <!-- easyExcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version >3.2.1</version><exclusions><exclusion><artifactId>poi-ooxml-schemas</art…

what is BERT?

BERT Introduction Paper 参考博客 9781838821593_ColorImages.pdf (packt-cdn.com) Bidirectional Encoder Representation from Transformer 来自Transformer的双向编码器表征 基于上下文&#xff08;context-based&#xff09;的嵌入模型。 那么基于上下文&#xff08;…

【MySQL性能优化】- MySQL结构与SQL执行过程

MySQL结构与SQL执行过程 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正…

开源了一款Vue3 Ts Vite4 uni-app 驱动的跨端快速启动模板

一、开源项目简介 由 Vue3 & Ts & Vite4 & uni-app 驱动的跨端快速启动模板。推荐使用 VSCode 编辑器开发&#xff0c;集成了 Prettier ESLint StyleLint husky lint-staged commitlint UnoCSS Vue3 TypeScript Vite4 setup&#xff0c;开箱即用。 二、…

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数&#xff08;BCD&#xff09;&#xff1a;Binary Coded Decimal美国信息交换标准代码&#xff08;ASCII&#xff09;&#xff1a;American Standard Code for Information Interchange 数据的排列顺序 最低有效位&#xff08;LSB&#xff09;&…

全链路追踪关键技术-TraceId、SpanId生成规则

链路追踪的traceid原理梳理 如何追踪微服务调用&#xff1f; ● traceId&#xff0c;用于标识某一次具体的请求ID。当用户的请求进入系统后&#xff0c;会在RPC调用网络的第一层生成一个全局唯一的traceId&#xff0c;并且会随着每一层的RPC调用&#xff0c;不断往后传递&…

day17 平衡二叉树 二叉树的所有路径 左叶子之和

题目1&#xff1a;110 平衡二叉树 题目链接&#xff1a;110 平衡二叉树 题意 判断二叉树是否为平衡二叉树&#xff08;每个节点的左右两个子树的高度差绝对值不超过1&#xff09; 递归遍历 递归三部曲 1&#xff09;确定递归函数的参数和返回值 2&#xff09;确定终止条…

uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…

【动态规划】LeetCode-42. 接雨水

42. 接雨水。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1…

Quartus 软件界面介绍与部分使用技巧

内容太多&#xff0c;只能慢慢补充完善了~ 对一个软件的熟练掌握&#xff0c;不仅在于完成项目工程&#xff0c;还在于对一个软件的各个功能的位置与使用要熟稔于心&#xff08;个人看法&#xff09;。 软件界面 默认打开的软件界面如下&#xff1a; 关掉所有能关闭的窗口&am…

怎么安装IK分词器

.安装IK分词器 1.在线安装ik插件&#xff08;较慢&#xff09; # 进入容器内部 docker exec -it elasticsearch /bin/bash ​ # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…

学习笔记-数据容器:dict(字典)

一.字典的定义 1.语法 使用{ }存储原始&#xff0c;每一个元素是一个键值对每一个键值对包含Key和Value&#xff08;用冒号分隔&#xff09;键值对之间使用逗号分隔Key和Value可以是任意类型的数据&#xff08;key不可为可变类型(列表集合字典)&#xff09;Key不可重复&#…

Oracle数据库 CentOS7上修改hostname后无法启动解决办法

目录 一、问题背景 二、解决问题 三、重启数据库 四、重启监听 一、问题背景 CentOS系统需要修改hostname&#xff0c;修改后oracle数据库无法启动和正常运行。 系统&#xff1a;CentOS7.3 数据库版本&#xff1a;Oracle 11g Express Edtion 二、解决问题 通过which orac…