利用python中socketserver实现客户端与服务器间非阻塞通信方法介绍

利用socketserver模块来实现网络客户端与服务器并发连接非阻塞通信

首先,先了解下socketserver模块中可供使用的类:

baseserver:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用tcpserver和udpserver。tcpserver/udpserver:基本的网络同步tcp/udp服务器。unixstreamserver/ unixdatagramserver:基本的基于文件同步tcp/udp服务器。forkingmixin/ threadingmixin:实现了核心的进程化或线程化的功能;作为混合类,与服务器类一并使用以提供一些异步特性;这个类不会直接实例化。forkingtcpserver/ forkingudpserver:forkingmixin和tcpserver/udpserver的组合。baserequesthandler:包含处理服务请求的核心功能。这个类只用于派生,所以不会生成这个类的实例可以考虑使用streamrequesthandler或datagramrequesthandler。streamrequesthandler/ datagramrequesthandler:用于tcp/udp服务器的服务处理工具。

下面我们正式进入主题,这里我们采用streamrequesthandler和threadingtcpserver来实现客户端与服务器并发连接非阻塞socket。

threadingtcpserver派生自threadingmixin,主要实现核心的进程化合线程化功能。

streamrequesthandler主要用于用于tcp/udp服务器的服务处理工具。

一、创建socketservertcp服务端

#创建socketservertcp服务器:
import socketserver
from socketserver import streamrequesthandler as srh
from time import ctime
host = ‘xxx.xxx.xxx.xxx’
port = 9999
addr = (host,port)
class servers(srh):
def handle(self):
print ‘got connection from ‘,self.client_address
self.wfile.write(‘connection %s:%s at %s succeed!’ % (host,port,ctime()))
while true:
data = self.request.recv(1024)
if not data:
break
print data
print “recv from “, self.client_address[0]
self.request.send(data)
print ‘server is running….’
server = socketserver.threadingtcpserver(addr,servers)
server.serve_forever()

二、创建socketservertcp客户端

#from socket
from socket import *
host = ‘xxx.xxx.xxx.xxx’
port = 9999
bufsize = 1024
addr = (host,port)
#client = socket.socket(socket.af_inet,socket.sock_stream)
client = socket(af_inet,sock_stream)
client.connect(addr)
while true:
data = raw_input()
if not data or data==’exit’:
break
client.send(‘%s\r\n’ % data)
data = client.recv(bufsize)
if not data:
break
print data.strip()
client.close()

以上就是利用python中socketserver实现客户端与服务器间非阻塞通信方法介绍的详细内容,更多请关注 第一php社区 其它相关文章!

Posted in 未分类

发表评论