当前位置: 首页 > article >正文

python中socket智能调结用户连接数

前边有解决过socket多客户端连接,但是会有一个问题就是无法自然增长,使用的是for循环,增长到一定数量后就无法继续增长,会带来问题,所以针对这个问题重新进行了解决方案输出:

服务端代码如下:

import socket

import sys

import threading

# from concurrent.futures import ThreadPoolExecutor

# threads = ThreadPoolExecutor(max_workers=10)

# threads = thread.ThreadPoolExecutor(max_workers=10)

conn_list = []

thread_stat = 0

ip = socket.gethostbyname(socket.gethostname())

port = 9876

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server_socket.bind((ip,port))

server_socket.listen(10)

print(socket.getaddrinfo(ip,port))

print(socket.gethostbyaddr(ip))

def get_conn():

recv_socket, addr = server_socket.accept()

conn_list.append(addr)

global thread_stat

thread_stat = 1

print('当前线程数量为:%d'%threading.active_count())

while True:

recv_str = recv_socket.recv(1024).decode()

print(conn_list)

if recv_str == "" or recv_str == 'exit':

# server_socket.close()

recv_socket.close()

sys.exit(0)

else:

print(recv_str)

if __name__ == '__main__':

s = 0

while (s < 1024 and thread_stat == 0):

print('s=%d,thread_stat = %d'%(s,thread_stat))

if s < 4:

s += 1

t = threading.Thread(target=get_conn)

t.start()

s += 1

elif thread_stat == 1:

s += 1

t = threading.Thread(target=get_conn)

t.start()

thread_stat = 0

解决方案说明:

采用while循环,不停的轮询,并设置状态量,轮询查看状态量,如果状态量发生变化,就创建一个新的线程,否则现有状态不变。

这个目前还不完善的地方在于,一个进程目前会根据内存大小资源情况来决定所能开通的线程数量,也还是有限的,无法在一个线程达到最大后,再开一个进程并创建线程,所以这个是还需要继续解决的。

当前的谷歌浏览器就是这样的,每创建一个新的窗口,就是会打开一个新的线程,都是单个线程对应一个窗口。这样可以有效的利用现有硬件资源。

在这里其实还有一些信息需要输出,比如当前连接数量,连接状态,启动的进程数量,连接客户端的Ip信息等,这些信息,应该留一个后门接口,在程序启动后使用命令进行状态查看。


http://www.kler.cn/a/2653.html

相关文章:

  • Nacos概述与集群实战
  • Linux下文件重定向
  • 009:传统计算机视觉之边缘检测
  • Linux 正则表达式 ⑪
  • Elasticsearch分片数量是什么意思?
  • 现代谱估计的原理及MATLAB仿真(二)(AR模型法、MVDR法、MUSIC法)
  • 2万字带你精通MySQL索引
  • Vue:路由管理模式
  • 编写软件界面的方式
  • maven setting 配置
  • 制作简单进销存管理系统(C#)
  • 大数据专业应该怎么学习
  • python --获取内网IP地址
  • libvirt零知识学习5 —— libvirt源码编译安装(3)
  • ring_log环形日志-6M缓冲区_proc接口
  • Linux上用Samba建立共享文件夹并通过Linux测试
  • 蓝桥杯每日一真题——[蓝桥杯 2021 省 B] 杨辉三角形(二分+规律)
  • oracle查询表空间大小以及每个表所占空间的大小
  • 已解决AttributeError:module tensorflow no attribute app异常的正确解决方法,亲测有效!!!
  • HAL库 STM32 串口通信
  • 使用STM32F103ZE开发贪吃蛇游戏
  • 把python开发的web服务,打包成docker镜像的方法
  • 算法基础-回溯算法
  • 什么是Nginx
  • 【从零开始的C语言】操作符详解
  • css总结9(过渡和2D变换)