zoukankan      html  css  js  c++  java
  • 服务器模型

    基本的服务器模型:

    并发:1、循环   

       2、并发模式

       3、IO多路复用

    循环:1、单线程程序;

        2、循环接收连接或者请求,然后处理;处理后继续循环

    循环服务器模型缺点:不能同时处理多个客户端的并行,不允许某个客户端长期占有服务器

           优点:结构比较简单,使用于UDP程序,要求处理请求可以快速完成

    IO多路复用模型:通过同时监控多个IO,来达到IO并发的目的。

          缺点;单线程,不能长期阻塞;不适合处理大量cup占有高的程序

          优点;开销小,比较适合IO密集型的服务端程序

     并行服务器:每当有一个客户端连接请求时,就创建一个新的进程或者线程,处理客户端的                                请求,而主进程/主线程可以继续接受其他客户端的连接。

    缺点:资源消耗比较大

    优点:使用客户端需要长期占有服务器的情况

    基于fork的多进程并发

    1、创建套接字 绑定  监听

    2、接受客户端请求

    3、创建子进程,处理客户端请求,父进程继续准备接受新的客户端连接

    4、客户端退出,销毁相应的子进程

    from socket import *
    import os,sys
    import signal
    
    #创建套接字
    
    HOST=''
    PORT=8888
    
    def client_handler(c):
        try:
            print("子进程接收客户的请求",c.getpeername())
            while True:
                data=c.recv(1024).decode()
                if not data:
                    break
                print(data)
                c.send(b"receive your message")
        except(KeyboardInterrupt,SystemExit):
            raise
        except Exception as e:
            print(e)
        c.close()
        sys.exit(0)#结束子进程
    
    
    
    s=socket()
    s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    s.bind((HOST,PORT))
    s.listen(5)
    
    print("父进程%d等待客户端链接"%os.getpid())
    while True:
        try:
            c,addr=s.accept()
        except KeyboardInterrupt:
            raise
        except Exception as e:
            print(e)
            continue
        #为新的客户端创建进程,处理僵尸进程
        
        signal.signal(signal.SIGCHLD,signal.SIG_IGN)
        pid=os.fork()
        if pid<0:
            print("creating failuer")
            c.close()
            continue
        elif pid==0:
            s.close()
            #处理客户端请求
            client_handler(c)
        else:
            c.close()
            continue

  • 相关阅读:
    线程池原理分析(一)-线程池体系结构
    LinkedBlockingQueue原理分析
    ArrayBlockingQueue原理分析(二)-迭代器
    ArrayBlockingQueue原理分析(一)
    ConcurrentHashMap原理分析(二)-扩容
    ConcurrentHashMap原理分析(一)-综述
    CyclicBarrier原理分析
    Jmeter集合点技术
    Jmeter关联技术
    JMeter参数化
  • 原文地址:https://www.cnblogs.com/sike8/p/11169624.html
Copyright © 2011-2022 走看看