服务器模型

Posted Sky__liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务器模型相关的知识,希望对你有一定的参考价值。

硬件服务器:主机 集群

厂商 :IBM   HP  联想  浪潮  

软件服务器 :编写的服务端应用程序,在硬件服务器上运行,一般依托于操作系统,给用户提供一套完整的服务

httpserver --> 处理http 请求

webserver -->网站的后端应用服务器程序

邮箱服务器 -->邮件处理

ftp 文件服务器 -->文件上传下载

功能 :网络连接 | 逻辑处理 | 数据交互 | 数据传输 | 协议的实现

结构 : c / s   客户端服务器模型

       b/ s   浏览器服务器模型

服务器目标 : 处理速度更快,并发量更高,安全性更强

硬件 :   更高的配置,更好的集成分布技术,更好的优化和网络安全技术

软件 :  占用资源更少,运行更稳定,算法更优良,安全性更好,并发性更高,更容易扩展


 

基础服务端模型

  循环模型 :循环接收客户端请求,处理请求,同一时刻只能处理一个请求,处理完毕后再处理下一个

    优点 : 实现简单,占用资源少

    缺点 :无法同时处理多个客户端任务

    适用情况 : 处理的任务可以短时间完成,不需要建立并发,更适合UDP使用

  并发模型:能够同时处理多个客户端请求

    IO并发 : IO多路复用

      优点 : 资源消耗少,IO处理速度快

      缺点 : 不能适用CPU密集型程序

    多进程/多线程并发:  为每个客户端创建单独的进程线程,执行请求

      优点:每个客户端可以长期占有服务器运行程序,能够使用多核资源,可以处理IO或者CPU运算

      缺点:消耗系统资源高

      多进程并发模型:

        使用fork()实现多进程并发

          1 创建套接字,绑定,监听

          2 等待接收客户端请求

          3 创建新的进程处理客户端请求

          4 原有进程继续等待接收新的客户端连接

          5 如果客户端退出则关闭子进程 

      

技术分享图片
import socket,signal
import os,sys
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((127.0.0.1,6666))
s.listen()
print(%s等待客户端连接%os.getpid())
signal.signal(signal.SIGCHLD,signal.SIG_IGN)
def client_(c):
    print(c)
    try:
        while True:
            date=c.recv(1024)
            if not date:
                break
            print(date.decode())
            c.send(date)
    except (KeyboardInterrupt,SyntaxError):
        sys.exit()
    except Exception as e:
        print(e)
    c.close()
    sys.exit(0)

while True:
    try:
        c,addr = s.accept()
    except KeyboardInterrupt:
        sys.exit(服务器退出)
    except Exception as e:
        print(e)
        continue

    #为客户端创建新的进程,处理请求
    pid = os.fork()
    if pid == 0:
        s.close()
        client_(c)

    #父进程或者创建失败都继续等待下一个客户端连接
    else:
        c.close()
        continue
View Code--用OS创建多进程

 

以上是关于服务器模型的主要内容,如果未能解决你的问题,请参考以下文章

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

如何防止在背面片段导航上再次设置视图模型

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Cg入门19:Fragment shader - 片段级模型动态变色

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)