>  기사  >  백엔드 개발  >  Python에서 SocketServer를 사용하여 클라이언트와 서버 간의 비차단 통신을 구현하는 방법 소개

Python에서 SocketServer를 사용하여 클라이언트와 서버 간의 비차단 통신을 구현하는 방법 소개

高洛峰
高洛峰원래의
2017-03-20 11:47:481688검색

SocketServer 모듈을 사용하여 네트워크 클라이언트와 서버 간의 동시 연결 및 비차단 통신을 실현합니다.

먼저 SocketServer 모듈에서 사용할 수 있는 클래스를 이해해 보겠습니다.

BaseServer: 핵심을 포함합니다. 서버의 함수는 혼합 클래스에 연결됩니다. 이 클래스는 파생에만 사용되므로 이 클래스의 인스턴스는 TCPServer 및 UDPServer 사용을 고려하지 않습니다.
TCPServer/UDPServer: 기본 네트워크 동기화 TCP/UDP 서버입니다.
UnixStreamServer/UnixDatagramServer: 기본 파일 기반 동기화 TCP/UDP 서버입니다.
kingMixIn/ ThreadingMixIn: 일부 비동기 기능을 제공하기 위해 서버 클래스와 함께 사용되는 핵심 프로세스 또는 스레딩 기능을 구현합니다. ForkingTCPServer/ForkingUDPServer: ForkingMixIn과 TCPServer/UDPServer의 조합입니다.
BaseRequestHandler: 서비스 요청 처리를 위한 핵심 기능이 포함되어 있습니다. 이 클래스는 파생용이므로 이 클래스의 인스턴스는 생성되지 않습니다. StreamRequestHandler 또는 DatagramRequestHandler를 사용해 보세요.
StreamRequestHandler/ DatagramRequestHandler: TCP/UDP 서버용 서비스 처리 도구입니다.

이제 공식적으로 주제에 들어갑니다. 여기서는 StreamRequestHandler와 ThreadingTCPServer를 사용하여 클라이언트와 서버 간의 동시 비차단 소켓 연결을 실현합니다.

ThreadingTCPServer는 ThreadingMixIn에서 파생되었으며 주로 핵심 프로세스 조합 및 스레딩 기능을 구현합니다.

StreamRequestHandler는 주로 TCP/UDP 서버의 서비스 처리 도구로 사용됩니다.

1. 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()

2. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.