pythonsocket多线程
‘壹’ python socket如何实现一个服务器对多个客户端进行交互。
使用多线程,下面的代码,简单实现一个多线程的web服务器:
#coding=utf-8
importsocket
importthreading
fromtimeimportsleep
defresponse(sock,addr):
print"收到请求"
data=sock.recv(1024)
printdata
sock.send(html)
sock.close()
html='''HTTP/1.1200OK Content-Type:text/html Helloworld!'''
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('0.0.0.0',80))
s.listen(50)
print"正在等待连接……"
while1:
sleep(0.1)
sock,addr=s.accept()
t=threading.Thread(target=response,args=(sock,addr))
t.start()
‘贰’ python socketserver和socket的区别
区别:
1.首先介绍下socket
socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也
称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一 般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原 意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务
内部调用流程为:
启动服务端程序
执行 TCPServer.init方法,创建服务端Socket对象并绑定 IP 和 端口
执行 BaseServer.init方法,将自定义的继承自SocketServer.BaseRequestHandler 的类 - MyRequestHandle赋值给 self.RequestHandlerClass
执行 BaseServer.server_forever 方法,While 循环一直监听是否有客户端请求到达 ...
当客户端连接到达服务器
执行 ThreadingMixIn.process_request 方法,创建一个 “线程” 用来处理请求
执行 ThreadingMixIn.process_request_thread 方法
执行 BaseServer.finish_request 方法,执行 self.RequestHandlerClass() 即:执行 自定义 MyRequestHandler 的构造方法(自动调用基类BaseRequestHandler的构造方法,在该构造方法中又会调用 MyRequestHandler的handle方法)
ForkingTCPServer
ForkingTCPServer和ThreadingTCPServer的使用和执行流程基本一致,只不过在内部分别为请求者建立 “线程” 和 “进程”。
‘叁’ pythonsocket服务端响应多个返回
创建 socket 对象,监听地址
while True: serversocket.accept() 不断接收请求
conn 其实就是 socket 对象,接受到请求之后,conn.recv(1024) 不断拼配告接出 request,然后解析 request
conn.send(response), conn.close() 响应请求,关掉
能同时枣卖毕响应多个请求是因为把 handler 部分新增线程来处理
在 socket.accept() 之后,把凳芹 handle_connection() 放到线程处理。
‘肆’ python如何提高socket速率
python如何提高socket速率,方法如下:
1、使用非阻塞模式:使用socket的setblocking函数可以将socket设置为非阻塞模式,这样可以避免socket处于等待状态,从而提高速度。
2、使用多线程和多进程:利用多线程和多进程可以同时处理多个socket连接,从而提高socket速率。
3、减少数据传输:减少socket发送数据量,可以减少消息传输时间,从而提高socket速度。
4、调整TCP参数:可以通过调整网络参数,如TCP缓冲区大小,TCP超时时间等等,来提高socket速度。
Python是一种计算机编程语言,它简单易学,功能强大,可以用来做日常任务,也可以用来开发复杂的软件和应用程序。它的语法简洁,易于理解,可以大大减少开发时间,节约开发费用。