سؤال

هل سيصبح Protocol Buffer لـ .NET خفيف الوزن/أسرع من التحكم عن بعد (SerializationFormat.Binary)؟هل سيكون هناك دعم من الدرجة الأولى له من حيث اللغة/الإطار؟أي.هل يتم التعامل معها بشفافية كما هو الحال مع خدمات التحكم عن بعد/خدمات الويب؟

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

المحلول

وأشك كثيرا في أنه سيكون لديه أي وقت مضى دعم اللغة المباشر أو حتى دعم الإطار - انها نوع من الشيء الذي يتم التعامل جيدا مع مكتبات 3rd الطرف

بلدي ميناء بهم من جافا البرمجية هو واضح - لديك ل استدعاء الأساليب لتسلسل / إلغاء تسلسل. (هناك بذرة RPC التي سيتم إجراء تسلسل تلقائيا / إلغاء تسلسل، ولكن لا تنفيذ RPC حتى الآن).

مشروع مارك Gravell في تناسبها بشكل جيد جدا مع WCF الرغم من ذلك - بقدر ما أستطيع 'م على علم، وكنت بحاجة فقط ليقولوا ذلك (مرة واحدة) لاستخدام مخازن بروتوكول للتسلسل، والباقي هو شفاف.

وأما من حيث السرعة، يجب أن ننظر في الصفحة مارك Gravell في المؤشر . قانون بلدي يميل إلى أن يكون أسرع قليلا من له، ولكن كلاهما من ذلك بكثير، أسرع بكثير من الخيارات التسلسل / إلغاء التسلسل الأخرى في هذا الإطار. وتجدر الإشارة إلى أن مخازن بروتوكول وأكثر من ذلك بكثير محدودة أيضا - أنها لا تحاول إجراء تسلسل أنواع التعسفي، فقط تلك المعتمدة. ونحن في طريقنا لمحاولة دعم المزيد من أنواع البيانات المشتركة (عشري، التاريخ والوقت وغيرها) بطريقة المحمولة (كرسائل عازلة بروتوكول الخاصة بهم) في المستقبل.

نصائح أخرى

بعض مقاييس الأداء والحجم قيد التشغيل هذه الصفحة.ليس لدي إحصائيات جون هناك في الوقت الحالي، فقط لأن الصفحة قديمة قليلاً (جون:يجب علينا إصلاح ذلك!).

إعادة الشفافية; شبكة بروتوبوف يمكن ربطه بـ WCF عبر العقد؛لاحظ أنه يعمل بشكل جيد مع MTOM عبر basic-http أيضًا.ومع ذلك، لا يعمل هذا مع Silverlight، نظرًا لأن Silverlight يفتقر إلى نقطة الحقن.إذا كنت تستخدم svcutil، فستحتاج أيضًا إلى إضافة سمة إلى الفصل (عبر فصل جزئي).

إعادة BinaryFormatter (عن بعد)؛نعم، هذا له الدعم الكامل؛يمكنك القيام بذلك ببساطة عن طريق تافهة ISerializable التنفيذ (أيفقط اتصل ب Serializer الطريقة بنفس الحجج).إذا كنت تستخدم protogen لإنشاء فصولك الدراسية، فيمكنه القيام بذلك نيابةً عنك:يمكنك تمكين هذا في سطر الأوامر عبر الوسائط (لا يتم تمكينه افتراضيًا كما هو موضح في الصورة). BinaryFormatter لا يعمل على جميع الأطر [CF، الخ]).

لاحظ أنه بالنسبة للكائنات الصغيرة جدًا (المثيلات الفردية، وما إلى ذلك) الموجودة على الاتصال المحلي عن بُعد (IPC)، فإن الملف الخام BinaryFormatter الأداء أفضل في الواقع - ولكن بالنسبة للرسوم البيانية غير التافهة أو الروابط البعيدة (الاتصال عن بعد بالشبكة)، يمكن لـ protobuf-net أن تتفوق عليه بشكل جيد.

يجب أن أشير أيضًا إلى أن تنسيق سلك البروتوكول المؤقت لا يدعم الميراث بشكل مباشر؛يمكن لـ protobuf-net أن ينتحل هذا (مع الاحتفاظ بتوافق الأسلاك)، ولكن كما هو الحال مع XmlSerializer، تحتاج إلى الإعلان عن الفئات الفرعية مقدمًا.


لماذا هناك نسختين؟

أعتقد أن متعة المصادر المفتوحة؛-p لقد عملنا أنا وجون في مشاريع مشتركة من قبل، وناقشنا دمج هذين المشروعين، لكن الحقيقة هي أنهما يستهدفان سيناريوهين مختلفين:

  • dotnet-protobufs (جون) هو منفذ لإصدار جافا الموجود.هذا يعني أنه يحتوي على واجهة برمجة تطبيقات مألوفة جدًا لأي شخص يستخدم إصدار Java بالفعل، وهو مبني على بنيات Java النموذجية (فئات الإنشاء، وفئات البيانات غير القابلة للتغيير، وما إلى ذلك) - مع بعض التقلبات في C#.
  • شبكة بروتوبوف (مارك) عبارة عن إعادة تنفيذ شاملة تتبع نفس التنسيق الثنائي (في الواقع، أحد المتطلبات المهمة هو أنه يمكنك تبادل البيانات بين تنسيقات مختلفة)، ولكن باستخدام مصطلحات .NET النموذجية:
    • فئات البيانات القابلة للتغيير (لا يوجد منشئون)
    • يتم التعبير عن تفاصيل عضو التسلسل في السمات (المشابهة لـ XmlSerializer, DataContractSerializer, ، إلخ)

إذا كنت تعمل على عملاء Java و.NET، فمن المحتمل أن يكون Jon's خيارًا جيدًا لواجهة برمجة التطبيقات (API) المألوفة على كلا الجانبين.إذا كنت تستخدم .NET خالصًا، فإن protobuf-net تتمتع بمزايا - واجهة برمجة التطبيقات (API) لنمط .NET المألوفة، ولكن أيضًا:

  • أنت لست كذلك قسري أن تكون العقد أولاً (على الرغم من أنك تستطيع ذلك، ويتم توفير منشئ الأكواد البرمجية)
  • يمكنك إعادة استخدام الأشياء الموجودة لديك (في الواقع، [DataContract] و [XmlType] غالبًا ما يمكن استخدام الفئات دون أي تغييرات على الإطلاق)
  • يتمتع بدعم كامل للوراثة (وهو ما يحققه على السلك عن طريق تغليف الانتحال) (ربما يكون فريدًا لتطبيق المخازن المؤقتة للبروتوكول؟لاحظ أنه يجب الإعلان عن الفئات الفرعية مسبقًا)
  • فهو يبذل قصارى جهده للتوصيل بأدوات .NET الأساسية واستغلالها (BinaryFormatter, XmlSerializer, ، صندوق رأس المال العامل، DataContractSerializer) - السماح له بالعمل مباشرة كمحرك بعيد.من المفترض أن يكون هذا انقسامًا كبيرًا جدًا عن صندوق جافا الرئيسي لمنفذ جون.

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

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