문제

서버와 트위스트로 구현 된 클라이언트간에 데이터를 전송하려고합니다.내가 아는 한 self.transport.write ([data])를 사용하여 데이터가 문자열 인 경우에만 작동합니다.다른 유형의 물건을 보낼 수있는 다른 방법이 있습니까?고맙습니다!

도움이 되었습니까?

해결책

소켓이 바이트를 수행합니다. 그것이 그들이 휴대하는 유일한 종류입니다. TCP 연결의 두 개의 두 개의 끝점은 바이트 만 서로 만 전달할 수 있습니다.

바이트는 모든 통신 형태의 가장 유용한 데이터 구조가 아닙니다. 따라서이 바이트 전송 위에 바이트를 포맷하고 해석하는 계획을 발명합니다. 이들은 프로토콜입니다.

twisted는 프로토콜을 클래스로 나타냅니다. almsot 항상 특정 계획을 구현하는 twisted.internet.protocol.Protocol의 서브 클래스.

이 클래스는 순수한 바이트가 순수한 바이트 인 무언가가 아닌 무언가를 돌리는 방법을 가지고 있습니다. 예를 들어, twisted.protocols.basic.NetstringReceiver NetString 프로토콜의 구현입니다. 바이트 수와 바이트 스스로를 나타내는 특정 바이트 수를 바이트로 바꿉니다. 바이트 카운트가 전달되어야하는 정보는 즉시 명백하지 않기 때문에 이것은 다소 미묘한 프로토콜입니다.

이 클래스는 구현 프로토콜에 따라 dataReceived 메소드에 따라 네트워크에서 수신 된 바이트를 해석하고 결과 정보를 더 구조화 된 것으로 변환합니다. NetstringReceiver는 길이 정보를 사용하여 네트워크에서 올바른 바이트 수를 정확히 수락 한 다음 TegineAcodicetagode 콜백으로 전달하여 단일 파이썬 stringReceived 인스턴스로 전달합니다.

다른 프로토콜은 str 이상을 수행합니다. 예를 들어, NetstringReceiver에는 FTP 프로토콜의 구현이 포함되어 있습니다. FTP는 파일 목록 및 파일을 소켓 (또는 실제로 여러 소켓) 위에 전달하는 프로토콜입니다. twisted.protocols.ftp는 소켓을 통해 이메일 전송을위한 프로토콜 인 POP3을 구현합니다.

많은 다른 것들이 많이 있고 많은 다른 것들이 있기 때문에 많은 다른 프로토콜이 있습니다. 당신이 무엇을하려고하는지 정확히 당신이 무엇을 하려는지에 따라, 아마도 바이트로 변환하는 데 다른 방법이 있거나 더 쉽거나 빠르거나 강력한 것으로 만들어졌습니다. 따라서 일반적인 경우에 이상적인 단일 프로토콜은 없습니다. 객체는 많은 다른 형태를 취할 수 있기 때문에 "물체를 보내는"사례가 포함되어 있으며, 사용자가 다른 이유가있을 수 있으며, 사용자가 다른 이유로 보내려는 여러 가지 방법이있을 수 있습니다. 이전에 보낸 등.

어떤 종류의 커뮤니케이션을 필요로하는지 생각하고 싶습니다. 이는 통신을 수행하기 위해 선택할 프로토콜에 대해 특정 것을 제안해야합니다.

연결의 다른쪽에있는 파이썬 객체의 메소드를 호출 할 수 있으려면 꼬인 확산

대신 상호 교차 언어를 원하면 정수, 문자열 및 목록과 같은 간단한 유형을 전달하면 XML-RPC ( 삐 었는가? twisted how-to> 더 적합하다.

XML-RPC보다 효율적인 공간이 더 많은 프로토콜이 필요한 경우 amp 가 더 적절할 수 있습니다.

목록이 계속됩니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top