문제

나는 처음으로 클라이언트-서버 프로그램을 작업하고 있으며, 내가하고있는 일을 어디에서 시작 해야하는지에 대해 부적절하게 부적절하다고 느낍니다.

나는 사용할 것이다 Google 프로토콜 버퍼 내 클라이언트와 서버간에 이진 데이터를 전송합니다. 파이썬 변형을 사용할 것입니다. 내가 이해 한 바와 같이, 기본 아이디어는 클라이언트가 데이터를 직렬화하여 서버로 보내서 데이터를 필수화한다는 것입니다.

문제는 이진 데이터를 서버로 보내기 위해 어디에서 시작 해야할지 잘 모르겠습니다. HTTP 요청과 같은 "간단한"것이기를 바랐지만 Google에서 이진 데이터를 전송하고 다양한 튜토리얼, 가이드 및 문서에서 손실되는 방법을 검색했습니다. HTTP 전송을 조사하여 잘못된 나무를 짖는 지 알 수 없습니다 (보안이 필요한 경우 HTTPS에 노치를 두드릴 수있었습니다). 그러나 소켓 프로그래밍 수준으로 가고 싶지는 않습니다.이 라이브러리를 사용하고 싶습니다. (나는 또한 표준 파이썬 라이브러리를 선호하지만 완벽한 제 3 자 도서관이 있다면 살아갈 것입니다.)

따라서 누군가가 파이썬을 통해 이진 데이터를 전송하는 좋은 방법에 대해 좋은 출발점을 가지고 있거나 약간의 설명을 원한다면 감사합니다. 내가 실행중인 서버는 현재 mod_python으로 Apache를 실행하고 있습니다.

도움이 되었습니까?

해결책

이진 데이터를 한 시스템에서 다른 시스템으로 옮길 때마다 명심해야 할 몇 가지 사항이 있습니다.

다른 기계는 동일한 정보를 다르게 저장합니다. 이것은 메모리와 네트워크 모두에 영향을 미칩니다. 추가 정보는 여기에http://en.wikipedia.org/wiki/endianness)

Python을 사용하고 있으므로 여기에서 약간의 여유를 줄일 수 있습니다 (클라이언트와 서버가 Python에 의해 둘 다를 가정하고 CPICKLE을 사용하여 데이터 직렬화 만하면됩니다. 이진을 정말로 원한다면 Python의 구조물 모듈에 익숙해 져야합니다 (http://docs.python.org/library/struct.html). 데이터를 포장/풀리는 방법을 배우십시오.

네트워크 통신의 어려움을 극복 할 때까지 먼저 간단한 라인 프로토콜 서버로 시작합니다. 전에 한 번도 해본 적이 없다면 매우 빠르게 혼란스러워 질 수 있습니다. 명령을 발행하는 방법, 데이터를 전달하는 방법, 오류 등에 대한 재 동기화 방법 ...

클라이언트/서버 프로토콜 설계의 기본 사항을 이미 알고 있다면 먼저 디스크의 포장 및 포장 이진 구조를 연습하십시오. 또한 이와 같은 경우 HTTP 및 FTP의 RFC를 언급합니다.

------- 주석을 기반으로 편집 -------- 일반적으로 이런 종류의 일은 서버에 파일의 체크섬과 파일 크기를 포함하는 "헤더"를 보내면 수행됩니다. 바이트. HTTP 헤더를 의미하지는 않지만 원하는대로 사용자 정의 할 수 있습니다. 이벤트 체인은 이런 일을해야합니다 ...

CLIENT: "UPLOAD acbd18db4cc2f85cedef654fccc4a4d8 253521"
SERVER: "OK"
(server splits the text line to get the command, checksum, and size)
CLIENT: "010101101010101100010101010etc..." (up to 253521 bytes)
(server reasembles all received data into a file, then checksums it to make sure it matches the original)
SERVER: "YEP GOT IT"
CLIENT: "COOL CYA"

이것은 지나치게 단순화되었지만 여기서 내가 말하는 것을 볼 수 있기를 바랍니다.

다른 팁

나는 당신의 질문을 제대로 얻었는지 확실하지 않지만 아마도 당신은 꼬인 프로젝트.

FAQ에서 볼 수 있듯이 "Twisted는 수많은 프로토콜을 지원하는 Python으로 작성된 네트워킹 엔진입니다. 웹 서버, 수많은 채팅 클라이언트, 채팅 서버, 메일 서버 등이 포함되어 있습니다. Twisted는 다수의 서브로 구성됩니다. -개별적으로 액세스 할 수있는 프로젝트 [...] ".

문서는 꽤 좋으며 인터넷에 많은 예가 있습니다. 도움이되기를 바랍니다.

Google 프로토콜 버퍼에 얼마나 묶여 있는지에 달려 있지만 확인하고 싶을 수도 있습니다. 절약.

절약 확장 가능한 교차 서비스 개발을위한 소프트웨어 프레임 워크입니다. 소프트웨어 스택과 코드 생성 엔진을 결합하여 C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 및 Ocaml간에 효율적이고 완벽하게 작동하는 서비스를 구축합니다.

홈페이지를 시작하는 좋은 예가 있습니다.

한 가지 빠른 질문 : 왜 이진? 페이로드 자체가 이진입니까, 아니면 이진 형식을 선호합니까? 전자 인 경우 JSON 또는 XML과 함께 인코딩하는 Base64를 사용할 수 있습니다. 더 많은 공간 (~ 34%)을 사용하고 약간 더 많은 처리 오버 헤드를 사용하지만 많은 사용 사례에 중요한 것은 충분하지 않습니다.

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