2009-06-01 4 views
11

질문 : 같은 응용 프로그램을 실행하는 다른 컴퓨터에 인터넷을 통해 패킷을 연결하고 보낼 수있는 파이썬 응용 프로그램을 어떻게 만들 수 있습니까? 사용할 수있는 기존 코드/라이브러리가 있습니까?파이썬에서 두 컴퓨터 간의 연결 만들기

배경 : 나는 프로그래밍에 초보자입니다 (HS 수석). 나는 파이썬으로 많은 것을 만들었지 만, 나는 더 큰 프로젝트를 시작하기로 결정했습니다. Magic을 만드는 것을 고려 중입니다. Gathering booster draft 시뮬레이터입니다.하지만 시작하기 전에 내 기술 세트가 주어지면 가능한지 확실하지 않습니다. 응용 프로그램은 카드가 선택/통과되는 컴퓨터간에 데이터를 전송해야합니다.

감사합니다.

답변

12

Twisted은 MIT에서 사용이 허가 된 Python 이벤트 기반 네트워킹 엔진입니다. 단일 기계가 하나 이상의 다른 기계와 통신 할 수 있고, 데이터 수신 및 송신 사이의 다른 작업을 모두 비동기 적으로 수행하고 단일 스레드/프로세스에서 실행하는 것을 의미합니다.

많은 프로토콜을 지원하므로 기존 프로토콜을 그대로 사용할 수 있습니다. 제 3 자 소프트웨어 (HTTP를 사용하는 통신 수단으로 HTTP를 사용하는 미들웨어 소프트웨어 : 프록시 등)에서 프로토콜을 지원 받기 때문에 더 좋습니다.

또한 고유 한 통신 프로토콜을 쉽게 만들 수 있습니다. 당신이 원하는.

documentation은 예제로 채워집니다.

3

보고 싶은 곳은 Python Standard Library입니다. 특히 관련이 될 몇 가지 섹션이 있습니다 : 당신은 당신이 가진 경험이 없다고 언급 한 이후

, 나는으로 시작하는 게 좋을 것 HTTP 기반 구현. HTTP 프로토콜은 매우 간단하고 사용하기 쉽습니다. 또한 서버의 경우 webpy, 클라이언트의 표준 라이브러리의 경우 HTTPLib과 같이이 작업을 지원하는 훌륭한 프레임 워크가 있습니다.

네트워킹에 깊이 들어가기를 원하면 socket 기반 구현은 교육적 일 수 있습니다. 이것은 lot 네트워킹 코드에서 사용되는 기본 개념을 가르쳐 줄 것이며 파일 스트림과 유사한 인터페이스가됩니다.

+0

소켓 용 유용한 하우투가 있습니다 : http://docs.python.org/howto/sockets.html. –

+0

초보자에게 추천하는 저수준 소켓에 -1이 강하다. 저의 가르침 경험에서 높은 수준의 틀을 가르친 다음 잘못 구현하는 방법을 가르치는 것보다 밑줄을 긋는 구현이 훨씬 더 합리적임을 보여줍니다. – nosklo

+1

나는 그것이 학생이 그것을 얻기 위해 무엇을 찾고 있는지와 그들이 실제로있는 수준에 달려 있다고 생각한다. 내 pov에서, 만약 내가 네트워크 통신에 대해 배우고 싶었고 어떻게 든 소켓에 대해 배우지 않았다면, 나는 화가 났을 것이다. 초기 연결이 형성된 후, 소켓을 사용하는 것은 파일 읽기/쓰기보다 약간 더 어렵습니다. 이점은 학생이 데이터를 표현하는 방법에 대해 생각하게된다는 것입니다. – Doug

7

표준 라이브러리에는 원하는 작업을 수행 할 수있는 SocketServer (here)가 포함되어 있습니다.

그러나 더 나은 해결책이 메시지 대기열을 사용하는 것일 수도 있습니다. 파이썬 인터페이스를 포함하여 많은 훌륭한 구현이 이미 존재합니다. 전에 RabbitMQ을 사용했습니다. 아이디어는 컴퓨터가 대기열에 가입하고 이벤트를 게시하거나 수신 대기 할 수 있다는 것입니다.

+1

+1 : 당신을 도울 수있는 라이브러리의 구현을 사용하십시오. – nosklo

1

통신은 소켓을 통해 이루어질 수 있습니다. 기존의 고수준 라이브러리를 사용하는지 직접 롤링할지 여부에 대한 질문입니다.

학습 경험으로 이것을하고 있다면, 가능한 한 낮은 수준에서 시작하여 실제 견과류와 볼트를보고 싶을 것입니다. 즉, TCP 연결을 사용하여 a SocketServer으로 시작하기를 원할 것입니다 (TCP는 기본적으로 데이터 전달을 보장하지만 UDP는 그렇지 않습니다).

몇 가지 간단한 코드 예. 하나를 설정하는 것은 매우 쉽습니다. 그러나 당신은 통신 프로토콜의 모든 세부 사항을 정의해야합니다 : 언제, 무엇을, 어떤 말을 듣고, 청취자가 정확히 무엇을 기대할 것인지, 영수증을 확인하기 위해 회신합니까, 등등을 보내야합니다.

+1

-1 : TCP 소켓 너트와 볼트가 어떤 도움이 될 것이라고 강력하게 동의하지 않습니다. 소켓을 직접 사용하면 코드를 수행하지 않는 방법을 배우게됩니다. 대신에 고레벨을 배우고 선택한 라이브러리를 공부하십시오. – nosklo

+1

C에서 프로그래밍은 거의하지 않지만, 메모리와 복잡한 데이터 유형으로 고수준 언어가 실제로 무엇을하는지에 대한 더 깊은 이해를하기 때문에 매우 잘 알고 있습니다. 나는 소켓 프로그래밍에 대해서도 마찬가지라고 생각한다. 하나는 프로덕션 애플리케이션을위한 TCP 레벨로 거의 갈 수 없을 것이지만, 그 레벨에서의 몇몇 연습은 더 높은 수준의 프레임 워크가하는 일에 대한 더 큰 이해를 가져온다. –

+0

@ John Pirie : 그렇습니다.하지만 초보자는 C (또는 어셈블리)를 먼저 배워야한다고 생각합니까? 나는 그렇게 생각하지 않는다. 자연스러운 경향은 먼저 높은 수준을 배우는 것이고 나중에 일반 개념이 잘 학습 된 후에는 낮은 수준의 개념을 이해하는 데 필요한만큼 내려갈 것이라고 생각합니다. 내 요점은 프레임 워크가 먼저 와야한다는 것입니다. – nosklo

1

또한 확인하십시오. out Pyro (파이썬 원격 객체). 자세한 내용은 this answer을 참조하십시오.

Pyro는 기본적으로 Python 개체 인스턴스를 원격으로 호출 할 수있는 서비스로 게시 할 수있게합니다. Pyro는 아마도 Python에서 Python으로의 프로세스 통신을 구현하는 가장 쉬운 방법 일 것입니다.

1

Kamaelia에 대해서도 살펴볼 가치가 있습니다. 원래의 유스 케이스는 네트워크 시스템이었고, 그러한 것들을 상대적으로 직관적으로 만들어줍니다. 일부 링크 : Overview of basic TCP system, Simple Chat server, Building a layered protocol, walk-through of how to evolve new components. 기타 극단 : P2P 라디오 시스템 : source, peer.

차이가 있다면 우리는 3 년 연속 google 여름 코드에 참여하여 초보자가 시스템에 액세스 할 수 있는지 여부를 테스트하고 경험이 풍부한 개발자와 경험이없는 개발자를 적극적으로 고용합니다. 모두가 유용한 시스템을 구축했습니다.

본질적으로 유닉스 파이프 라인을 사용한 적이 있다면 아이디어가 익숙 할 것입니다.

경고 : I 말이 몇 가지 다른 방법으로 재생, 당신은하지만이 일을하는 방법을 배우고 싶다면

:-) Kamaelia의 주요 덩어리를 쓰고, 당신은 확실히 트위스트를 확인해야합니다 (표준 이 질문에 대한 답변), Pyro & 표준 라이브러리 도구. 각각은 서로 다른 접근법을 가지고 있으며, 그것들을 배우는 것이 분명 도움이 될 것입니다!

그러나 nosklo와 마찬가지로 소켓 라이브러리를 직접 사용하지 말고 라이브러리를 대신 사용하는 것이 좋습니다. 간단히 말해서 사람들이 깨닫지 못하는 소켓 프로그래밍을 얻는 것이 훨씬 어렵 기 때문입니다.