2016-06-07 2 views
0

모듈 소켓에 익숙하지 않아 구현 방법을 배우고 있습니다. 현재이 기본 서버를 작성했습니다.파이썬 소켓 서버 또는 스레드 소켓

import socket    

s = socket.socket()   
host = "Some IP" 
port = 12345     
s.bind((host, port))   

print "Setting up server on", host + ":" + str(port) 

s.listen(5)     

while True: 
    c, addr = s.accept()  

    print 'Got connection from', addr 
    c.send('Thank you for connecting.') 
    print c.recv(1024) 

c.close() 

그러나이 서버는 한 번에 하나의 클라이언트 만 처리 할 수 ​​있습니다. 추가 교육을 위해 한 번에 여러 클라이언트를 처리하려고합니다. 그래서 연구를하고 도서관 SocketServer을 발견했습니다. 정규 소켓 모듈을 스레딩하는 방법에 대해서도 들었습니다. 그래서 모든 새로운 연결은 새로운 스레드를 만듭니다. 찾은 정보가 충분하지 않았습니다. 내가 찾은이 두 가지 방법의 차이점을 이해하도록 도와주십시오.

미리 감사드립니다.

+0

[zeromq] (http://zeromq.org/)을 보았습니까? 소켓 조작/서버 작성에 매우 유용한 계층을 추가합니다. 파이썬 바인딩은 [pyzmq] (https://github.com/zeromq/pyzmq) (pip 설치 pyzmq)를 통해 사용할 수 있습니다. 또한 빠르게 타오른다. –

+0

고맙습니다. 지금은 배우고 있기 때문에 표준 모듈을 사용하는 것을 선호합니다. –

답변

1

소켓 라이브러리는 매우 낮은 수준이므로 실제로 대부분의 것을 직접 구현해야합니다.

SocketServer가 더 높은 수준입니다. 내부적으로 소켓 라이브러리를 사용하며 한 번에 여러 클라이언트를 처리 할 수있는 쉬운 인터페이스를 제공하며 소켓 사용과 관련된 모든 저급 항목에 대해 걱정할 필요가 없습니다.

여기에서 예제를보고 자신의 코드와 비교하십시오. 차이점을 보게 될 것입니다. https://docs.python.org/2/library/socketserver.html#examples

+0

하지만 기본적으로 그들은 똑같은 일을합니까? 멀티 스레딩 + 소켓 및 서버 소켓. –

+0

예, 소켓 모듈은 클라이언트와 서버 모두에 사용할 수 있습니다. SocketServer는 서버에만 사용할 수 있지만 일반적으로 소켓 모듈보다 훨씬 사용하기 쉽습니다. – user2746752