zoukankan      html  css  js  c++  java
  • socket 编程实例 基于线程池实现服务端并发

    1.socket编程

       软件测试并jmeter为的是实现客户端并发,jmeter 的原理是使用线程池,

       而软件开发的目的是为实现服务端的并发支持多用户同时并发工作

    2. 基于多线程实现套接字服务端实现并发

    客户端: 

    '''
    客户端只要单用户循环通信
    '''
    import socket
    client = socket.socket()
    client.connect(('127.0.0.1',8090))
    while True:
    client.send('33'.encode('utf-8'))
    data = client.recv(1024)
    print(data)

    '''
    服务端要实现多用户连接 并实现循环通信
    '''
    方式1: 线程池
    import socket
    from concurrent.futures import ThreadPoolExecutor

    server = socket.socket()

    server.bind(
    ('127.0.0.1', 9000)
    )

    server.listen(5)


    # 1.封装成一个函数 多用户实现循环通信 一个用户创建一个通道
    def run(conn):
    while True:
    try:
    data = conn.recv(1024)
    if len(data) == 0:
    break
    print(data.decode('utf-8'))
    conn.send('111'.encode('utf-8'))

    except Exception as e:
    break

    conn.close()


    if __name__ == '__main__':
    print('Server is run....')
    pool = ThreadPoolExecutor(50)
    while True:
    conn, addr = server.accept()
    print(addr)
    pool.submit(run, conn)



    方式2: 直接循环不设置并发数
    def communicate(conn):   #  一个用户一个通道
    while True:
    try:
    data = conn.recv(1024)
    if len(data) == 0:
    break
    conn.send(data.upper())
    except Exception as e:
    print(e)
    break
    conn.close()


    def server():
    server = socket.socket()
    server.bind(('127.0.0.1',8989))
    server.listen(5)
    while True:
    conn,addr = server.accept()
    t = Thread(target= communicate,args=(conn,) ) # 因为python中的() 既可以表示数学公式中的小括号,又可以表示元组
    t.start() # 执行communicate函数 server函数为一个线程,start()会令启一个线程

    if __name__ == '__main__':
    s = Thread(target = server)
    s.start()


  • 相关阅读:
    VMware三个版本workstation、server、esxi的区别
    vmwarevsphere与vmwareworkstation的区别
    PubMed、MEDLINE和PMC
    1000个并发线程,10台机器,每台机器4核,设计线程池大小(转)
    Internet与Intranet
    VMware安装操作系统鼠标失灵
    超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题
    一篇理解什么是CanSet, CanAddr?
    collection v1.3.1升级全记录
    我写的诗
  • 原文地址:https://www.cnblogs.com/bigbox/p/12040209.html
Copyright © 2011-2022 走看看