python 并发socketserver模块
1.源码class
1.server类:处理链接
+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+ 1)进程类
+------------+
| BaseServer |
+------------+
|
v
+------------+
| TCPServer |
+------------+
|
v
+------------+ +------------------+
| ForkingMixIn| | UDPServer |
+-----------+ +------------------+
| |
v v 备注此类继承ForkingMixIn和TCPServer
+------------------+ +--------------------+
| ForkingUDPServer | | ForkingTCPServer |
+----------------+ +--------------------+ 2)线程类
+------------+
| BaseServer |
+------------+
|
v
+------------+
| TCPServer |
+------------+
|
v
+-----------+ +------------------+
| ThreadingMixIn| | UDPServer |
+-----------+ +------------------+
| |
v v 备注此类继承ThreadingMixIn和ThreadServer
+------------------+ +--------------------+
| ThreadingUDPServer | | ThreadingTCPServer |
+----------------+ +--------------------+ 2.request类: 处理通信
+-------------------------------------------+
| BaseRequestHandler |
+------------------------------------------+
| |
v v
+--------------------+ +----------------------+
| StreamRequestHandler| |DatagramRequestHandler|
+--------------------+ +-----------------------+ '''
2.创建socketserver步骤
创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequestHandlerclass and overriding its handle() method; this method will process incoming requests. Second, you must instantiate one of the server classes, passing it the server’s address and the request handler class. Then call the handle_request() orserve_forever() method of the server object to process one or many requests. Finally, call server_close() to close the socket.
3.简单实例
#!/usr/bin/python env
# coding:utf-8 import socketserver ip_port = ('127.0.0.1', 800) '''
def __init__(self, request, client_address, server):
self.request = request
self.client_address = client_address
self.server = server
self.setup()
try:
self.handle()
finally:
self.finish()
''' # tcp服务端并发
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print('conn is: ', self.request) # conn 链接
print('addr is: ', self.client_address) # addr 客户端地址
conn = self.request
client_address = self.client_address while True: # 通信循环
try: # 处理client端端口 报出的异常
data = conn.recv(1024)
if not data: break # 处理接受数据为空,无限循环
print('客户端发来的信息是:', data.decode('utf-8'), client_address)
self.request.sendall(data)
except Exception as e:
print(e)
break if __name__ == '__main__':
s = socketserver.ThreadingTCPServer(ip_port, MyServer) # 多线程 连接循环 通信循环套在连接循环中
# s = socketserver.Forkingip_port,MyServer) #多进程 连接循环 通信循环套在连接循环中 s.serve_forever() # 客户端
from socket import * ip_port = ("127.0.0.1", 800)
back_log = 10
buffer_size = 1024 tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port) while True:
msg = input(">>: ")
if not msg: continue # 解决输入空数据问题
tcp_client.send(msg.encode("utf-8"))
data = tcp_client.recv(back_log) print("客户端发来信息:", data.decode("utf-8")) tcp_client.close()
python 并发socketserver模块的更多相关文章
- python 39 socketserver 模块并发通信
socketserver模块 socketserver模块实现一个服务端与多个客户端通信.是在socket的基础上进行了一层封装,底层还是调用的socket. socketserver干了两件事: 1 ...
- 浅析python中socketserver模块使用
虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...
- Python之socketserver模块和验证客户端链接的合法性
验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,os secret_ke ...
- python之 socketserver模块的使用
在我们正常的使用socket模块来写一个server的程序就会显得比较的复杂通常一般流程为 1.生成socket实例对象 2.绑定地址 3.开始监听 4.接收数据 一般demo为 # 服务器 impo ...
- Python网络编程(3)——SocketServer模块与简单并发服务器
主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...
- Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- Python网络编程(2)-粘包现象及socketserver模块实现TCP并发
1. 基于Tcp的远程调用命令实现 很多人应该都使用过Xshell工具,这是一个远程连接工具,通过上面的知识,就可以模拟出Xshell远程连接服务器并调用命令的功能. Tcp服务端代码如下: impo ...
- python之socketserver实现并发
python之socketserver实现并发 服务端 import socketserver #socketserver模块是用来实现并发 # 我们自己的类里一定要继承socketserver.Ba ...
- python 网络编程之socket开发和socketserver模块
一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
随机推荐
- VS2010一调试就卡死的问题解决方案 (转)
前几天我的vs2010突然不能调试了.后来找了很多的解决方案都不能解决问题. 1. 删除所有的bin, debug 2. 重建工程. 3. 重新安装Silverlight的开发包. 还是不行. 最后是 ...
- 那些H5用到的技术(6)——屏幕适配
前言长屏适配单页适配参考 前言 曾经屏幕适配一直是个头疼的问题,各种坑,各种浏览器&设备兼容问题,好在的是,随着技术&标准的不断发展,这个问题得到了极大程度的解决,这篇文章主要对之前开 ...
- WCF系列教程之客户端异步调用服务
本文参考自http://www.cnblogs.com/wangweimutou/p/4409227.html,纯属读书笔记,加深记忆 一.简介 在前面的随笔中,详细的介绍了WCF客户端服务的调用方法 ...
- hibernate关联关系的crud2
hibernate关联关系的CRUD操作,解释都在注释里了,讲了fetchType.cascade. User类: package com.oracle.hibernate; import javax ...
- vue实现非路由跳转以及数据传递
定义一个父组件 <template> <v-layout> <v-card contextual-style="dark" v-if="sh ...
- Visual Studio、.net framework、CLR与JDK、JRE、JVM、Eclipse
.net平台 java平台 开发工具 Visual Studio ...
- D的小L
D的小L 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0<n<10),写出1 ...
- linux编程之GDB调试
GDB是一套字符界面的程序集,可以用它在linux上调试C和C++程序,它提供了以下的功能: 1 在程序中设置断点,当程序运行到断点处暂停 2 显示变量的值,可以打印或者监视某个变量,将某个变量的值显 ...
- <深入理解JavaScript>学习笔记(1)_编写高质量JavaScript代码的基本要点
注:本文是拜读了 深入理解JavaScript 之后深有感悟,故做次笔记方便之后查看. JQuery是一个很强大的JavaScript 类库,在我刚刚接触JavaScript的就开始用了. JQuer ...
- docker部署ELK日志处理
docker环境下部署的ELK系统,日志处理,保留最近五个小时的日志 dockerlog.sh #!/bin/bash logs=`find /var/lib/docker/containers/ - ...