硬件服务器:主机 集群

厂商 :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

--用OS创建多进程


集成模块的使用

  python2   SocketServer

  python3  SocketServer

功能: 

  通过模块的不同类的组合完成多进程/多线程的TCP/UDP并发

  StreamRequestHandler  处理TCP套接字请求类

  DatagramRequestHandler  处理UDP套接字请求类

  

  TCPServer  创建TCP Server

  UDPServer  创建UDP Server

  ForkingMixIn  创建多进程

  ForkingTCPServer  ---> ForkingMixIn + TCPServer

  ForkingUDPServer  ---> ForkingMixIn + UDPServer

  

  ThreadingMixIn   创建多线程

  ThreadingTCPServer  ---> ThreadingMixIn + TCPServer

  ThreadingUDPServer  ---> ThreadingMixIn + UDPServer

# import socketserver
# class Server(socketserver.ForkingMixIn,socketserver.TCPServer):
# pass
#
# class Hand(socketserver.BaseRequestHandler):#继承BaseRequestHandler类,覆盖handle方法
# def handle(self):
# print(self.request.getpeername())
# while True:
# data = self.request.recv(1024)
# if not data:
# break
# print(data.decode())
# self.request.send(b'1111')
# if __name__ == '__main__':
# host = ('127.0.0.1',6666)
#
# server = Server(host,Hand)
# server.serve_forever()

---模块创建TCP--server

import socketserver
class Server(socketserver.ForkingMixIn,socketserver.UDPServer):
pass
#
class Hand(socketserver.DatagramRequestHandler):#继承BaseRequestHandler类,覆盖handle方法
def handle(self):
#print(self.request.getpeername())
print(self.server)
print(self.request)
print(self.client_address)
while True:
data= self.rfile.readline()
if not data:
break
print(data.decode())
self.wfile.write(b'')
if __name__ == '__main__':
host = ('127.0.0.1',6666)
server = Server(host,Hand)
server.serve_forever()

---模块创建UDP-server



简单服务器通信 模型socketserver的更多相关文章

  1. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  2. 通信服务器群集——跨服务器通信Demo(源码)

    对于一些基于TCP Socket的大型C/S应用来说,能进行跨服务器通信可能是一个绕不开的功能性需求.出现这种需求的场景类似于下面描述的这种情况. 假设,我们一台TCP应用服务器能同时承载10000人 ...

  3. Android操作HTTP实现与服务器通信(转)

    Android操作HTTP实现与服务器通信   本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方 ...

  4. Pomelo实现最简单的通信-egret。

    昨天因为需要开始学习Pomelo 做H5游戏的服务端. 因为个人学习习惯,我从来不适合去跟着文档看.一般我直接是看下大概的API,但是Pomelo的API全部都是英文的. 昨天我就告诉自己用一下午时间 ...

  5. Android操作HTTP实现和服务器通信

    众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HT ...

  6. 【netty】(2)---搭建一个简单服务器

    netty(2)---搭建一个简单服务器 说明:本篇博客是基于学习慕课网有关视频教学.效果:当用户访问:localhost:8088 后 服务器返回 "hello netty"; ...

  7. .NET Core微服务之路:利用DotNetty实现一个简单的通信过程

    上一篇我们已经全面的介绍过<基于gRPC服务发现与服务治理的方案>,我们先复习一下RPC的调用过程(笔者会在这一节的几篇文章中反复的强调这个过程调用方案),看下图

  8. (原创)如何使用boost.asio写一个简单的通信程序(一)

    boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...

  9. Android操作HTTP实现与服务器通信

    (转自http://www.cnblogs.com/hanyonglu/archive/2012/02/19/2357842.html) 本示例以Servlet为例,演示Android与Servlet ...

随机推荐

  1. Qt编写自定义控件23-广告轮播控件

    一.前言 广告轮播这个控件做的比较早,是很早以前定制一个电信客户端时候用到的,该客户端需要在首页展示轮播预先设定好的图片,图片的路径可以自由设定,然后轮播的间隔速度可以自由控制,同时该控件还需要提供两 ...

  2. 图解 HTTP 笔记(六)——HTTP 首部

    本章主要讲解了 HTTP 首部的结构,已经首部中各字段的用法. 一.HTTP 报文首部 上图是 HTTP 请求报文的结构. HTTP 请求报文由方法.URI.HTTP 版本.HTTP 首部字段等组成. ...

  3. vps虚拟机df -h根分区100%

    前言:今天上午接到一个网友的求助,说是服务器的根分区满了.但是,找不到具体的大文件在哪里.由于故障确实很古怪,我就要来了故障服务器的相关账户密码. 故障服务器相关环境: 系统:Centos 6.5 s ...

  4. Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现

    转发地址:https://www.iteye.com/blog/elim-2394762 2 基于Aspectj注解的Spring Aop简单实现 Spring Aop是基于Aop框架Aspectj实 ...

  5. 华为Liteos移植到stm32F03ZE

    华为Liteos和物联网设备侧sdk移植到stm32F03ZE霸道板子上 推荐官方教程:https://liteos.github.io/ 啥是LIteos "开源免费"的实时操作 ...

  6. bat修改注册表

    bat添加注册表,这里只是其中一部分,以后再补充.各项参数介绍的挺详细的,认真按照语法要求写就可以. reg add "HKCU\Software\Microsoft\Windows\Cur ...

  7. 我是如何提高工作效率的-工具篇(二)-listary

    痛点: 还在为不能闪电速度搜索全盘文件.程序.无缝切换程序烦恼吗? 效果图: 功能1:搜索 各种文件.支持模糊搜索.全拼.文字首字母等模糊查询方式. (功能强大.尽情探索!)   痛点:文件好多啊,可 ...

  8. 安装mysqlmysql-5.7.24-linux-glibc2.12-x86_64

    1.下载mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz(/opt目录) 2.tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_ ...

  9. DNS域名解析系统_1

    DNS服务概述: DNS的模式为C/S模式 DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与ip地址的解析服务. DNS是一个分布式数据库, ...

  10. Fabric 查看zookeeper和kafka

    进入kafka容器: sudo docker exec -it kafka bash cd opt/kafka 查看Kafka自动创建的topic bin/kafka-tipiccs.sh --lis ...