python网络编程(三)TCP多线程的长连接

大噶中秋快乐呀 嘿嘿(●ˇ∀ˇ●)

多进程和多线程

多进程:进程就是正在运行中的程序或者正在执行中的任务,当程序还没开始或者已经结束那么就不能再成为进程。多进程就是多个正在运行的程序或任务。
举个栗子:大噶可以打开电脑上的任务管理器,便可查看操作系统下有哪些进程,如图状态栏里显示正在运行的每一个程序就是进程。
在这里插入图片描述
多线程:线程就是进程或任务的执行者,多线程就是进程中有多个执行者。
举个栗子:银行里有50个客户等待取钱,那么此时银行就要去处理这个任务(进程启动),
但只有1个窗口提供服务,那么效率就会显得偏慢(单线程),此时增加5个窗口来提供取钱服务(多线程),那么效率会大大提升,此时这些每一个窗口就是一个线程,他们共同去完成给50个客户取钱的任务

多线程和多进程最大的区别:
① 进程之间数据不共享,在程序中优先执行父进程(主进程),举个栗:电脑启动时优先执行的win10或者其他操作系统,然后才能去执行微信qq等程序,此时,操作系统就是父进程,微信QQ就是操作系统的子进程。
② 一个进程中的多线程共享这个进程的数据,在程序中主线程和子线程同时启动,同时抢占进程的资源,谁先抢到是不确定的。

关于长连接的描述脖主在上篇描述,如果有不清楚的可以去查看下,放上链接:https://blog.csdn.net/weixin_38335127/article/details/100717440

TCP多线程长连接

采用多线程长连接可以实现一个服务器同时可以响应多个客户端请求,这是相比单线程长连接的最大的优点
代码环节:实现一个多线程服务器端:

from socket import *
from threading import Thread

def main():
        # 创建socket对象
        server_sock = socket(AF_INET,SOCK_STREAM)
        
        #定义服务器的地址
        address = (gethostname(),6688)
        server_sock.bind(address)
        
        #监听请求
        server_sock.listen()
        
        #建立长连接
        try:
            while  True:
                print('---多进程--等待客户端连接本服务器6688!--')
                client_sock,addr = server_sock.accept()
                print('客户端(%s)已成功连接。。'%str(addr))
                
                # 由于线程创建是在循环里创建和启动的
                # 因此每循环一次就会产生一个线程
                thread = Thread(target = work,args = (client_sock,addr,))
                thread.start()
        finally:
            server_sock.close()

def work(sock,addr):
    while True:
        data = sock.recv(1024)
        if len(data)>0:
            print('接收到数据内容:',data)
        else:
            print('客户端%s已关闭'%str(addr))
            break


if __name__ == '__main__':
        main()


在使用的时候先开启服务器端,然后可以打开多个网络连接助手,连接成功后便可以发送在服务器端接收客户端的消息
在这里插入图片描述
脖主就写道这啦,有什么问题或者建议可以在评论区发喔,大噶中秋节快乐哈(●’◡’●)

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值