博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SocketServer
阅读量:6150 次
发布时间:2019-06-21

本文共 1714 字,大约阅读时间需要 5 分钟。

SocketServer模块

内部使用 IO 多路复用以及'多线程'和'多进程',从而实现并发处理多个客户端请求的 socket 服务端.

讲人话就是:每个客户端请求连接到服务器时, socket 服务端都在会服务器中创建一个线程或者进程,来专门处理当前客户端的所有请求.

其实这个模块就是基于 tcp 的套接字,关键就是两个循环.一个链接循环,一个通讯循环

socketserver 模块中分为两大类: 

  1. server(服务) 类是为了解决链接问题而存在
  2. request(请求) 类是为了解决通信问题存在

分析一波 socketserver 源码

太多...略......

直接看总结???

基于 tcp 的 socketserver 我们自己定义的类中

  1. self.server 就是套接字对象
  2. self.request 就是一个链接
  3. self.client_addr 就是客户端地址

最基础版本:

这是服务端, 客户端没写  把之前的直接拿过来就可以了.# import socketserver## class MYTCPServer(socketserver.BaseRequestHandler):#     def handle(self):#         # print(self.request)#         # print(self.client_address)##         while True :#             try :#                 data = self.request.recv(1024)  #self.request 就相当于 conn 了#                 if not data: break#                 self.request.send(data.upper())#             except Exception:#                 break##         self.request.close()## server = socketserver.ThreadingTCPServer(('127.0.0.1',6666),MYTCPServer)## server.allow_reuse_address = True# server.serve_forever()还是把客户端写了吧.#客户端from socket import *client = socket(AF_INET,SOCK_STREAM)client.connect(('127.0.0.1',6666))#循环while True;    msg = input('>> :').strip()    if not msg: continue    client.send(msg.encode('utf-8'))    data = client.recv(1024)    print(data.decode('utf-8'))

ThreadingTCPServer:

使用 ThreadingTCPServer:

  1. 创建一个继承自 ScoketServer.BaseRequestHandler的类
  2. 类中必须定义一个 handle 的方法
  3. 启动 ThreadingTCPServer

ForkingTCPServer:

ForkingTCPServer和 ThreadingTCPServer 的使用和执行流程基本一样, 区别:在内部分别为请求者建立 一个是线程,一个是进程.

就是把上面代码里的 server = socketserver.ThreadingTCPServer(('127.0.0.1',6666),MYTCPServer) 变为server = socketserver.ForkingTCPServer(('127.0.0.1',6666),MYTCPServer)

转载于:https://www.cnblogs.com/ugfly/p/7474958.html

你可能感兴趣的文章
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>