سؤال

أنا أعمل على برنامج خادم العميل لأول مرة، وأنا أشعر بعدم كفاية بكاء في مكان بدء ما أقوم به.

انا ذاهب للاستخدام مخازن بروتوكول جوجل لنقل البيانات الثنائية بين موكلي وخادمي. سأكون أستخدم plariant python. الفكرة الأساسية، كما أفهم، هي أن العميل سوف يسقط البيانات، وإرساله إلى الخادم، والذي ستحمل بعد ذلك البيانات.

المشكلة هي، أنا لست متأكدا حقا من أين أبدأ بإرسال البيانات الثنائية إلى الخادم. كنت آمل أن يكون هناك شيء "بسيط" مثل طلب HTTP، لكنني كنت أبحث حول Google للحصول على طرق لنقل البيانات الثنائية والحصول على فقدان العديد من البرامج التعليمية والأدلة والوثائق. لا أستطيع حتى أن أقول إذا كنت تنبح الشجرة الخطأ من خلال التحقيق في تحويلات HTTP (كنت آمل أن أستخدمها، لذلك يمكنني أن أطرقها من الشق إلى https إذا كان الأمن ضروريا). أنا حقا لا أريد أن أضطر إلى الذهاب إلى مستوى برمجة المقبس، على الرغم من ذلك - أود استخدام المكتبات المتوفرة قبل الدوران إلى ذلك. (أود أيضا أن تكون مكتبات بيثون القياسية، على الرغم من وجود مكتبة الطرف الثالث المثالية، فسوف أعيش.)

لذلك، إذا كان لدى أي شخص نقطة انطلاق جيدة (أو يريد أن يفسر قليلا أنفسهم) على مدى طريقة جيدة لنقل البيانات الثنائية عبر بيثون، سأكون ممتنا. يعمل الخادم الذي أقوم بتشغيله حاليا Apache مع MOD_PYTHON، بالمناسبة.

هل كانت مفيدة؟

المحلول

في أي وقت ستحرك البيانات الثنائية من نظام إلى آخر هناك بضعة أشياء يجب مراعاتها.

آلات مختلفة تخزن نفس المعلومات بشكل مختلف. هذا له تأثير في كل من في الذاكرة وعلى الشبكة. مزيد من المعلومات هنا (http://en.wikipedia.org/wiki/endianness.)

نظرا لأنك تستخدم Python، يمكنك قص نفسك بعض الركود هنا (على افتراض أن العميل والخادم سيستخدم في Python) واستخدم فقط CPICKLE لتسلسل بياناتك. إذا كنت تريد حقا ثنائية، فسوف تضطر إلى الحصول على مريحة مع وحدة بنية بيثون (http://docs.python.org/library/Stric.html.). وتعلم كيفية حزمة / فك البيانات الخاصة بك.

أود أن أبدأ لأول مرة بخوادم بروتوكول خط بسيط حتى تضمن صعوبة اتصال الشبكة. إذا لم تكن قد فعلت ذلك قبل أن تتمكن من الالتزام بسرعة كبيرة. كيفية إصدار الأوامر، وكيفية اجتياز البيانات، وكيفية إعادة المزامنة على الأخطاء وغيرها ...

إذا كنت تعرف بالفعل أساسيات تصميم بروتوكول العميل / الخادم، فقم بتمارس التعبئة والتغليف الهياكل الثنائية على القرص أولا. أنا أيضا الرجوع إلى RFCs من HTTP و FTP للحالات مثل هذا.

------- تحرير بناء على تعليق -------- عادة ما يتم هذا النوع من الأشياء عن طريق إرسال الخادم "رأس" يحتوي على المجموع الاختباري للملف وكذلك حجم الملف في بايت. لاحظ أنني لا أقصد رأس 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"

هذا مبسطة مفرطة، ولكن آمل أن تتمكن من رؤية ما أتحدث عنه هنا.

نصائح أخرى

لست متأكدا من أنني حصلت على سؤالك الصحيح، ولكن ربما يمكنك إلقاء نظرة على مشروع ملتوية.

كما ترون في الأسئلة الشائقة، "الملتوية عبارة عن محرك شبكات مكتوب في بيثون، يدعم العديد من البروتوكولات. أنه يحتوي على خادم ويب، العديد من عملاء الدردشة، خوادم الدردشة، خوادم البريد، وأكثر من ذلك. يتكون الملتوية من عدد من الفرعية - الإصدارات التي يمكن الوصول إليها بشكل فردي [...] ".

الوثائق جيدة جدا، وهناك الكثير من الأمثلة على الإنترنت. آمل أن يساعد.

أعتقد أن ذلك يعتمد على مدى تعادلك إلى مخازن بروتوكول Google، ولكن قد ترغب في التحقق تقطير.

تقطير هو إطار برنامج لتطوير الخدمات عبر اللغات القابلة للتطوير. فهو يجمع بين مكدس برامج مع محرك جيل رمز لبناء الخدمات التي تعمل بكفاءة وبسلاسة بين C ++ و Java و Python و PHP و Ruby و Erlang و Perl و Haskell و C # و Cocoa و Smalltalk و Ocaml.

هناك مثال رائع للبدء في صفحتهم الرئيسية.

سؤال سريع واحد: لماذا ثنائي؟ هل الحمولة نفسها ثنائية، أو هل تفضل فقط تنسيق ثنائي؟ إذا كان ذلك سابقا، فمن الممكن استخدام ترميز Base64 مع JSON أو XML أيضا؛ يستخدم المزيد من المساحة (~ 34٪)، ومعالجة المزيد من المعالجة النفقات العامة، ولكن ليس بالضرورة بما يكفي للمادة للعديد من حالات الاستخدام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top