2010-01-24 5 views
2

네트워크 프로그래밍을 위해 어떤 라이브러리를 사용해야합니까? sockets이 최고입니까, 아니면 더 높은 수준의 인터페이스가 표준입니까?Python의 네트워크 프로그래밍

꽤 크로스 플랫폼 (예 : Linux, Windows, Mac OS X)이 될 필요가 있으며 동일한 라이브러리를 사용하는 다른 Python 프로그램에 연결할 수 있어야합니다. Twisted

답변

7

노드간에 파이썬 데이터를 보내고 싶을뿐입니다 (별도의 컴퓨터에있을 수도 있음)? SimpleXMLRPCServer를 살펴볼 수도 있습니다. 그것은 붙박이 소켓 서버를 기반으로하는 붙박이 HTTP 서버를 기반으로, 어느 쪽도 아니 대부분의 업계 최강의 서버는 주위 없지만 서둘러 쉽게 설정할 :

from SimpleXMLRPCServer import SimpleXMLRPCServer 
server = SimpleXMLRPCServer(("localhost", 9876)) 

def my_func(a,b): 
    return a + b 

server.register_function(my_func) 
server.serve_forever() 

를 그리고 쉽게 연결 to :

import xmlrpclib 
s = xmlrpclib.ServerProxy('http://localhost:9876') 

print s.my_func(2,3) 
>>> 5 
print type(s.my_func(2,3)) 
>>> <type 'int'> 
print s.my_func(2,3.0): 
>>> 7.0 

Twisted는 산업 응용 분야에서 널리 사용되지만 잔인한 학습 곡선이 있습니다.

+0

+1은 OP가 네트워킹, 통신 만 필요로하지 않는다는 것을 깨닫는 다른 사람입니다. – Kylotan

6

당신이에 관심이있을 수있는 프레임 워크가있다. 나는 잠시 동안 거대한 팬이었습니다. 그러나 그것에 대해 조금만 생각하고 그것에 대해 생각할 때 나는 더 깨어났습니다. 복잡하고 마지막으로 보았을 때, 많은 것이 프로그램이 항상이 될 수있는 가정을 가졌습니다. 프로그램이 메모리 사용량이 커질 수있는 상황을 이끌어 낼 수있는 상황을 이끌어 낼 수있게되었습니다. 보내지 않는 데이터는 끊임없이 버퍼링됩니다. 원격 측에서 또는 충분히 빠르게 픽업되지 않습니다.

제 의견으로는 어떤 종류의 네트워크 프로그래밍을 원하십니까? 입출력을 기다리는 동안 많은 일을 처리하는 것에 신경 쓰지 않는 경우가 많습니다. 예를 들어, HTTP는 매우 요청 지향적 인 반응을 보이기 때문에 단일 서버와 통신 할 때 트위스티드 (Twisted) 및 일반 소켓과 같은 것이 필요하거나 파이썬의 내장 HTTP 라이브러리가 정상적으로 작동 할 이유가 거의 없다.

모든 종류의 서버를 작성하는 경우 거의 확실하게 이벤트 기반이어야합니다. 트위스티드는 약간의 우위를 가지고 있지만 여전히 나에게는 너무 복잡해 보입니다. 예를 들어 비트 토 런트는 파이썬으로 작성되었으며 전혀 뒤틀림을 사용하지 않습니다.

Twisted를 선호하는 또 다른 요소는 이미 작성된 많은 프로토콜에 대한 코드가 있다는 것입니다. 따라서 기존 프로토콜을 말하고 싶다면 이미 많은 노력이 필요할 것입니다.

5

앞서 언급했듯이, Twisted가 가장 많이 사용되었습니다 (멀리까지). 그러나 탐구할만한 가치있는 대안이 많이 있습니다. TornadoDiesel은 아마도 상위 2 명의 경쟁자입니다. 보다 완전한 비교 is found here.

+0

Twise에 대한 링크를 추가하면 Jeramy 's보다 더 나은 답변을 얻을 수 있습니다. – Omnifarious

6

답변은 수행하려는 작업에 따라 다릅니다.

"네트워크 프로그래밍에 어떤 라이브러리를 사용해야합니까?" 꽤 모호합니다.

예를 들어 HTTP를 수행하려면 urllib, urllib2, httplib, sockets과 같은 표준 라이브러리를 살펴보십시오. 모든 프로토콜은 사용하려는 프로토콜과 작업하려는 네트워크 계층에 따라 다릅니다.

다양한 네트워크 작업 ... 이메일, 웹, RPC를위한 파이썬 라이브러리가, 등 등 ...

우선, 표준 라이브러리 참조 설명서를 통해보고 당신이해야 할 작업 참조 그럼 거기에서 이동하십시오 : http://docs.python.org/library/index.html

5

개인적으로 저는 매우 단순한 트위스티드 버전처럼 약간의 표준 라이브러리에서 asyncore를 사용합니다. 그러나 이것은 간단하고 낮은 수준의 인터페이스를 선호하기 때문에 가능합니다. 더 높은 수준의 인터페이스를 원할 경우, 특히 자신의 프로그램의 다른 인스턴스와 통신하는 경우에는 반드시 네트워킹 계층에 대해 걱정할 필요가 없으며 더 높은 수준 인 RPyC 또는 pyro을 대신 고려할 수 있습니다. 그러면 네트워크가 구현 세부 사항이되며 정보를 보내는 데 집중할 수 있습니다.

1

표준 lib에있는 socket 모듈은 고성능이 필요하지 않다면 제 의견으로는 좋은 선택입니다.

거의 모든 언어의 거의 모든 개발자가 알고있는 매우 유명한 API입니다. 그것은 꽤 sipmple이고 인터넷에서 사용할 수있는 많은 정보가 있습니다. 또한 다른 사람들이 코드를 더 쉽게 이해할 수 있습니다.

Twisted와 같은 이벤트 중심 프레임 워크는 성능이 좋지만 기본적인 경우 표준 소켓이면 충분합니다.

물론 상위 프로토콜 (http, ftp ...)을 사용하는 경우 Python 표준 라이브러리에서 해당 구현을 사용해야합니다.

0

소켓은 낮은 수준의 API이며 운영 체제 인터페이스에 직접 매핑됩니다. Twisted, Tornado ... 높은 수준의 프레임 워크입니다. 물론 소켓이 낮은 수준이기 때문에 소켓에 ​​내장되어 있습니다.

  • 는 HTTP, FTP와 같은 잘 알려진 프로토콜을 사용하거나 자신 만의 프로토콜을 생성합니다 : 그것은 TCP/IP 프로그래밍에 올 때 , 당신은 당신이 사용 갈까요 대해 결정을 내릴 수있는 몇 가지 기본적인 지식을 가지고해야합니까?
  • 차단 또는 차단 안함? Twisted, Tornado는 비 차단 프레임 워크 (기본적으로 nodej와 유사)입니다. 물론 소켓은 다른 모든 프레임 워크가 기반이되기 때문에 모든 것을 처리 할 수 ​​있습니다.)
관련 문제