بررسی اجمالی

ساخت وبلاگ

بافرهای پروتکل یک مکانیسم توسعه یافته بی طرف و بی طرف زبان برای سریال سازی داده های ساختاری است.

بافرهای پروتکل یک مکانیسم بدون خنثی ، بی طرف و بی طرف زبان برای سریال سازی داده های ساختار یافته به روشی سازگار با رو به جلو و سازگار با عقب فراهم می کنند. این مانند JSON است ، به جز کوچکتر و سریعتر ، و اتصال زبان های بومی را ایجاد می کند. شما تعریف می کنید که چگونه می خواهید داده های شما یک بار ساختار یافته باشد ، می توانید از کد منبع تولید شده ویژه استفاده کنید تا به راحتی داده های ساختاری شده خود را به و از انواع جریان داده ها و با استفاده از انواع زبانها بنویسید و بخوانید.

بافرهای پروتکل ترکیبی از زبان تعریف (ایجاد شده در پرونده های . proto) ، کدی است که کامپایلر Proto برای رابط با داده ها ، کتابخانه های زمان اجرا خاص زبان و قالب سریال سازی برای داده هایی که به یک پرونده نوشته شده است (یا ارسال می شود ، ایجاد می کند. در سراسر یک اتصال شبکه).

بافر پروتکل چه مشکلی را حل می کند؟

بافرهای پروتکل یک قالب سریال سازی را برای بسته های داده های تایپ شده و ساختاری ارائه می دهند که تا اندازه چند مگابایت دارند. این قالب برای هر دو ترافیک شبکه زودگذر و ذخیره طولانی مدت داده ها مناسب است. بافرهای پروتکل را می توان با اطلاعات جدید بدون اعتبار داده های موجود یا نیاز به به روزرسانی کد گسترش داد.

بافرهای پروتکل رایج ترین قالب داده در Google هستند. آنها به طور گسترده در ارتباطات بین سرور و همچنین برای ذخیره بایگانی داده ها روی دیسک استفاده می شوند. پیام ها و خدمات بافر پروتکل توسط فایلهای مهندس-نویسنده . Proto شرح داده شده است. موارد زیر یک پیام مثال را نشان می دهد:

پیام شخص   اختیاری رشته نام = 1;  اختیاری int32 id = 2;  اختیاری رشته پست الکترونیک = 3;  > 

کامپایلر Proto در زمان ساخت و ساز در پرونده های . proto برای تولید کد در زبانهای مختلف برنامه نویسی (تحت پوشش سازگاری متقابل به زبان بعداً در این موضوع) فراخوانی می شود تا بافر پروتکل مربوطه را دستکاری کند. هر کلاس تولید شده حاوی دسترسی ساده ای برای هر زمینه و روشها برای سریال سازی و تجزیه کل ساختار به و از بایت های خام است. موارد زیر مثالی را به شما نشان می دهد که از روشهای تولید شده استفاده می کند:

شخص جان = شخص.نوکر()  .شناسه را قرار دهید(1234)  .نام("جان دو")  .خط("jdoe@example. com")  .ساختن(); خروجی = جدید fileOutputStream(استدلال[0]); جان.نوشته(خروجی); 

از آنجا که از بافرهای پروتکل به طور گسترده در همه نوع خدمات در Google استفاده می شود و داده های موجود در آنها ممکن است مدتی ادامه یابد ، حفظ سازگاری به عقب بسیار مهم است. بافرهای پروتکل امکان پشتیبانی یکپارچه از تغییرات ، از جمله افزودن زمینه های جدید و حذف زمینه های موجود را به هر بافر پروتکل بدون شکستن خدمات موجود امکان پذیر می کند. برای اطلاعات بیشتر در مورد این موضوع ، بعداً در این موضوع ، به روزرسانی تعاریف Proto را بدون به روزرسانی کد مشاهده کنید.

مزایای استفاده از بافرهای پروتکل چیست؟

بافرهای پروتکل برای هر موقعیتی که در آن شما نیاز به سریال سازی داده های ساختاری ، ضبط مانند ، تایپ شده به صورت خنثی زبان ، بی طرف و بی طرف و قابل گسترش دارید ، ایده آل است. آنها اغلب برای تعریف پروتکل های ارتباطی (همراه با GRPC) و برای ذخیره سازی داده ها استفاده می شوند.

برخی از مزایای استفاده از بافرهای پروتکل شامل موارد زیر است:

  • ذخیره داده های جمع و جور
  • تجزیه
  • در دسترس بودن در بسیاری از زبان های برنامه نویسی
  • عملکرد بهینه شده از طریق کلاسهای تولید شده به صورت خودکار

سازگاری زبان متقابل

همان پیام ها را می توان با کد نوشته شده در هر زبان برنامه نویسی پشتیبانی شده خوانده شود. شما می توانید یک برنامه جاوا را بر روی یک داده ضبط یک پلتفرم از یک سیستم نرم افزاری داشته باشید ، آن را بر اساس تعریف . proto سریال کنید و سپس مقادیر خاص را از آن داده های سریالی در یک برنامه پایتون جداگانه استخراج کنید که روی یک پلت فرم دیگر اجرا می شود.

زبانهای زیر مستقیماً در کامپایلر بافر پروتکل ، پروتکل پشتیبانی می شوند:

زبانهای زیر توسط Google پشتیبانی می شوند ، اما کد منبع پروژه ها در مخازن GitHub ساکن است. کامپایلر Protoc برای این زبانها از افزونه ها استفاده می کند:

زبانهای اضافی به طور مستقیم توسط Google پشتیبانی نمی شوند ، بلکه توسط سایر پروژه های GitHub. این زبانها در افزودنیهای شخص ثالث برای بافرهای پروتکل پوشانده شده اند.

پشتیبانی از پروژه متقابل

شما می توانید با تعریف انواع پیام در پرونده های . proto که در خارج از پایه کد یک پروژه خاص قرار دارند ، از بافرهای پروتکل در پروژه ها استفاده کنید. اگر انواع پیام ها یا عذاب هایی را که پیش بینی می کنید در خارج از تیم فوری خود استفاده می کنید ، می توانید آنها را بدون وابستگی در پرونده خود قرار دهید.

چند نمونه از تعاریف پروتئاری که به طور گسترده در Google مورد استفاده قرار می گیرند ، Timestamp. proto و Status. proto هستند.

به روزرسانی تعاریف پروتو بدون به روزرسانی کد

این استاندارد است که محصولات نرم افزاری سازگار با عقب باشد ، اما سازگار با آنها کمتر متداول است. تا زمانی که هنگام به روزرسانی برخی از شیوه های ساده را دنبال کنید . Proto ، کد قدیمی پیام های جدید را بدون مشکل می خواند و از هر زمینه تازه اضافه شده غافل می شود. به کد قدیمی ، زمینه هایی که حذف شده اند مقدار پیش فرض خود را دارند و زمینه های مکرر حذف شده خالی خواهند بود. برای کسب اطلاعات در مورد زمینه های "مکرر" ، بعداً در این موضوع نحو تعریف بافرهای پروتکل را ببینید.

کد جدید همچنین به طور شفاف پیام های قدیمی را می خواند. زمینه های جدید در پیام های قدیمی حضور نخواهند داشت. در این موارد ، بافر پروتکل مقدار پیش فرض معقول را ارائه می دهند.

چه موقع بافرهای پروتکل مناسب نیستند؟

بافرهای پروتکل همه داده ها متناسب نیستند. به خصوص:

  • بافرهای پروتکل فرض می کنند که کل پیام ها می توانند به طور همزمان در حافظه بارگیری شوند و از نمودار شیء بزرگتر نیستند. برای داده هایی که بیش از چند مگابایت است ، یک راه حل متفاوت را در نظر بگیرید. هنگام کار با داده های بزرگتر ، ممکن است به دلیل نسخه های سریالی شده به چندین نسخه از داده ها پایان دهید ، که می تواند باعث ایجاد سنبله های غافلگیرکننده در استفاده از حافظه شود.
  • هنگامی که بافرهای پروتکل سریالی می شوند ، داده های یکسان می توانند سریال های باینری مختلفی داشته باشند. شما نمی توانید دو پیام را برای برابری مقایسه کنید بدون اینکه به طور کامل آنها را تجزیه کنید.
  • پیام ها فشرده نمی شوند. در حالی که پیام ها می توانند مانند هر پرونده دیگر فشرده شوند یا از آن استفاده شوند ، الگوریتم های فشرده سازی با هدف خاص مانند موارد استفاده شده توسط JPEG و PNG فایلهای بسیار کوچکتر را برای داده های نوع مناسب تولید می کنند.
  • پیام های بافر پروتکل در هر دو اندازه و سرعت برای بسیاری از کاربردهای علمی و مهندسی که شامل آرایه های بزرگ و چند بعدی از شماره های نقطه شناور است ، کمتر از حداکثر کارآمد است. برای این برنامه ها ، متناسب و قالب های مشابه از سربار کمتری برخوردار هستند.
  • بافرهای پروتکل در زبانهای غیر محور که در محاسبات علمی محبوب هستند ، مانند Fortran و IDL به خوبی پشتیبانی نمی شوند.
  • پیام های بافر پروتکل ذاتاً خود را از داده های خود توصیف نمی کنند ، اما آنها یک طرح کاملاً بازتابی دارند که می توانید برای اجرای توصیف خود استفاده کنید. یعنی شما نمی توانید بدون دسترسی به پرونده مربوط به . proto آن را کاملاً تفسیر کنید.
  • بافرهای پروتکل یک استاندارد رسمی از هر سازمان نیستند. این امر باعث می شود آنها برای استفاده در محیط هایی با شرایط قانونی یا سایر الزامات برای ایجاد بر اساس استانداردها نامناسب باشند.

چه کسی از بافرهای پروتکل استفاده می کند؟

بسیاری از پروژه ها از بافرهای پروتکل استفاده می کنند ، از جمله موارد زیر:

بافر پروتکل چگونه کار می کند؟

نمودار زیر نحوه استفاده از بافرهای پروتکل برای کار با داده های خود را نشان می دهد.

شکل 1. گردش کار بافر پروتکل

کدهای تولید شده توسط بافرهای پروتکل روشهای ابزار برای بازیابی داده ها از پرونده ها و جریان ها ، استخراج مقادیر فردی از داده ها ، بررسی اینکه آیا داده ها وجود دارد ، داده ها را به یک پرونده یا جریان و سایر توابع مفید سریال می کند.

نمونه های کد زیر نمونه ای از این جریان در جاوا را به شما نشان می دهد. همانطور که قبلاً نشان داده شده است ، این یک تعریف . proto است:

پیام شخص   اختیاری رشته نام = 1;  اختیاری int32 id = 2;  اختیاری رشته پست الکترونیک = 3;  > 

تهیه این پرونده . proto یک کلاس سازنده ایجاد می کند که می توانید برای ایجاد نمونه های جدید ، مانند کد جاوا زیر استفاده کنید:

شخص جان = شخص.نوکر()  .شناسه را قرار دهید(1234)  .نام("جان دو")  .خط("jdoe@example. com")  .ساختن(); خروجی = جدید fileOutputStream(استدلال[0]); جان.نوشته(خروجی); 

سپس می توانید داده ها را با استفاده از روش های پروتکل Methods در زبان های دیگر مانند C ++ ایجاد کنید:

شخص جان; fstream ورودی(vergv[1], منزوی::in | منزوی::دودویی); جان.پیشرو(&ورودی); در نظر گرفتن id = جان.id(); std::رشته نام = جان.نام(); std::رشته پست الکترونیک = جان.پست الکترونیک(); 

پروتکل بافر تعریف نحو

هنگام تعریف پرونده های . proto ، می توانید مشخص کنید که یک فیلد اختیاری یا مکرر (Proto2 و Proto3) یا مفرد (Proto3) است.(گزینه ای برای تنظیم یک زمینه مورد نیاز در Proto3 وجود ندارد و در Proto2 به شدت دلسرد می شود. برای اطلاعات بیشتر در این مورد ، به "مورد نیاز برای همیشه" در مشخص کردن قوانین میدانی مراجعه کنید.)

پس از تنظیم اختیاری/تکرارپذیری یک فیلد ، نوع داده را مشخص می کنید. بافرهای پروتکل از انواع داده های اولیه معمول مانند اعداد صحیح ، بول و شناور پشتیبانی می کنند. برای لیست کامل ، به انواع مقدار مقیاس مراجعه کنید.

یک زمینه همچنین می تواند از:

  • یک نوع پیام ، به طوری که می توانید قسمت هایی از تعریف را لانه کنید ، مانند تکرار مجموعه داده ها.
  • یک نوع enum ، بنابراین می توانید مجموعه ای از مقادیر را انتخاب کنید.
  • یک نوع یک نوع ، که می توانید از آن استفاده کنید وقتی یک پیام دارای بسیاری از قسمت های اختیاری است و حداکثر یک قسمت در همان زمان تنظیم می شود.
  • یک نوع نقشه ، برای اضافه کردن جفت های ارزش کلید به تعریف خود.

در Proto2 ، پیام ها می توانند پسوندها را برای تعریف زمینه های خارج از پیام ، خود به خود اختصاص دهند. به عنوان مثال ، طرحواره پیام داخلی کتابخانه ProtoBUF امکان برنامه های سفارشی و خاص استفاده را فراهم می کند.

برای کسب اطلاعات بیشتر در مورد گزینه های موجود ، به راهنمای زبان Proto2 یا Proto3 مراجعه کنید.

بعد از تنظیم اختیاری و نوع فیلد ، یک شماره فیلد را اختصاص می دهید. شماره های میدانی قابل استفاده مجدد یا استفاده مجدد نیستند. اگر یک زمینه را حذف کنید ، باید شماره زمینه آن را رزرو کنید تا از استفاده مجدد از شماره به طور تصادفی از شماره استفاده کنید.

پشتیبانی از نوع داده اضافی

بافرهای پروتکل بسیاری از انواع مقدار مقیاس ، از جمله عدد صحیح که از رمزگذاری با طول متغیر و اندازه ثابت استفاده می کنند ، پشتیبانی می کند. همچنین می توانید با تعریف پیام هایی که خودشان ، انواع داده هایی هستند که می توانید به یک قسمت اختصاص دهید ، انواع داده های کامپوزیت خود را ایجاد کنید. علاوه بر انواع ارزش ساده و کامپوزیت ، چندین نوع مشترک منتشر می شود.

انواع مشترک

  • مدت زمان مدت زمان امضا شده و ثابت زمان ، مانند 42s است.
  • Timestamp یک نقطه از زمان مستقل از هر منطقه زمانی یا تقویم ، مانند 2017-01-15T01: 30: 15. 01Z است.
  • فاصله زمانی یک بازه زمانی مستقل از منطقه زمانی یا تقویم است ، مانند 2017-01-15T01: 30: 15. 01Z-2017-01-16T02: 30: 15. 01z.
  • تاریخ یک تاریخ تقویم کامل است ، مانند 2025-09-19.
  • Dayofweek یک روز هفته است ، مانند دوشنبه.
  • Timeofday یک روز از روز است ، مانند 10:42:23.
  • Latlng یک جفت عرض جغرافیایی/طول جغرافیایی است ، مانند عرض جغرافیایی 37. 386051 و طول ی-122. 083855.
  • پول مبلغی با نوع ارز خود مانند 42 دلار است.
  • PostalAddress یک آدرس پستی است ، مانند 1600 آمفی تئاتر Parkway Mountain View ، CA 94043 USA.
  • رنگ یک رنگ در فضای رنگ RGBA است.
  • ماه یک ماه از سال است ، مانند آوریل.

تاریخ

برای مطالعه در مورد تاریخچه پروژه پروتکل بافر ، به تاریخچه بافرهای پروتکل مراجعه کنید.

بافر پروتکل فلسفه منبع باز

بافرهای پروتکل در سال 2008 به عنوان راهی برای ارائه توسعه دهندگان در خارج از گوگل با همان مزایایی که از آنها در داخل به دست می آوریم ، باز شد. ما از جامعه منبع باز از طریق به روزرسانی های منظم در زبان پشتیبانی می کنیم زیرا این تغییرات را برای پشتیبانی از نیازهای داخلی خود انجام می دهیم. در حالی که ما درخواست های کشش را از توسعه دهندگان خارجی می پذیریم ، همیشه نمی توانیم درخواست های ویژگی و رفع اشکال را که مطابق با نیازهای خاص Google نیست ، اولویت بندی کنیم.

جامعه توسعه دهنده

برای هشدار در مورد تغییرات آینده در بافرهای پروتکل و ارتباط با توسعه دهندگان و کاربران ProtoBUF ، به گروه Google بپیوندید.

منابع اضافی

  • بافرهای پروتکل GitHub
فارکس تحلیل تکنیکال...
ما را در سایت فارکس تحلیل تکنیکال دنبال می کنید

برچسب : نویسنده : مرتضی احمدی بازدید : <-PostHit-> تاريخ : يکشنبه 22 مرداد 1402 ساعت: 21:14