یک 2 نظر

  1. علی

    ممنون از مطالب مفید سایتتون

  2. ali

    توضیحی با استفاده از ترجمه ماشینی:
    این مقاله یک کلاس کارگزار HTTP ساده را پوشش می‌دهد که ممکن است در پروژه‌های خود وارد کنید , یا در مورد پروتکل HTTP بررسی کنید .
    پس‌زمینه
    خدمات وب عملکرد بالا اغلب در webservices جامد سنگ مانند IIS ، آپاچی ، یا Tomcat میزبانی می‌شوند . با این حال ، HTML یک زبان UI انعطاف‌پذیر است که می‌تواند برای استفاده از یک کاربر HTML از هر برنامه یا سرور backend مفید باشد . در این شرایط ، پیچیدگی بالا و پیچیدگی webserver خارجی به ندرت ارزش آن را دارد . What’s نیاز به یک کلاس HTTP ساده دارد که می‌تواند به راحتی برای خدمات ساده وب تعبیه شود . این کلاس به آن نیاز دارد .
    استفاده از کد
    اولین تجدید نظر در مورد چگونگی استفاده از کلاس ، و سپس در برخی از جزئیات چگونگی عملکرد آن . ما با subclassing HttpServer شروع می‌کنیم و implementations را برای دو روش انتزاعی و handlePOSTRequest فراهم می‌کنیم …
    اگر شما پروژه نمونه را کامپایل و اجرا کنید ، باید بتوانید یک مرورگر وب انتخاب کنید . Let’s نگاهی کوتاه به what’s می‌اندازد که زیر کاپوت قرار دارد .
    این webserver ساده به دو مولفه تقسیم می‌شود .
    کلاس HttpServer یک TcpListener را روی درگاه ورودی باز می‌کند و در یک حلقه در حال وارد کردن درخواست‌های اتصال TCP با استفاده از AcceptTcpClient قرار می‌گیرد . این اولین گام از جابجایی یک اتصال TCP است . درخواست ورودی به ” خوب شناخته‌شده ” ما رسید و این فرآیند یک جفت پورت جدید برای سرور ایجاد می‌کند تا با این مشتری ارتباط برقرار کند . این جفت جدید ، جلسه TcpClient ماست . این امر بندر آزاد ما را آزاد نگه می‌دارد تا ارتباطات جدید را بپذیرد . همانطور که در کد زیر می‌بینید ، هر بار شنونده یک TcpClient جدید را باز می‌کند ، HttpServer جدیدی ایجاد می‌کند و یک رشته جدید برای کار در آن شروع می‌کند . این کلاس همچنین شامل روش‌های انتزاعی است که طبقه فرعی ما باید به منظور تولید پاسخ انجام دهد .
    در این نقطه ، اتصال TCP سرور جدید به HttpProcessor در رشته خود به دست می‌آید . کار HttpProcessor’s این است که به درستی headers HTTP را تجزیه و کنترل کنید و کنترل دستی را برای پیاده‌سازی روش صحیح انتزاعی کنترل کنید . Let’s فقط به چند قسمت از پردازش سر HTTP نگاه می‌کند . خط اول درخواست HTTP شبیه زیر است :
    دریافت / myurl HTTP / ۱.۰
    پس از راه‌اندازی جریان ورودی و خروجی در فرآیند ( ) ، HttpProcessor ما parseRequest ( ) را فراخوانی می‌کند که در آن خط درخواست HTTP بالا و تجزیه می‌شود .
    برای هر خط ، ما به دنبال کولون می‌گردیم ( لبخند : ) جداکننده ، گرفتن نخ قبل از یک نام ، و رشته بعد از یک مقدار . وقتی به یک خط خالی می‌رسیم , به این دلیل باز می‌گردیم که همه headers را دریافت کرده‌ایم .
    در این مرحله ، ما به اندازه کافی برای کنترل simple یا پست خود می‌دانیم ، بنابراین به متصدی مناسب ارسال می‌کنیم . در مورد یک پست ، trickiness برای رسیدگی به داده‌های پست وجود دارد . یکی از headers این درخواست شامل طول محتوا است . در حالی که ما می‌خواهیم به subclass’s اجازه دهیم که در واقع با داده‌های پست سروکار داشته باشیم ، باید فقط به آن‌ها اجازه دهیم تا از بایت طول تقاضا کنند . در این سرور ساده ، ما این وضعیت را با استراتژی کثیف اما موثر خواندن تمام داده‌های پست به یک MemoryStream قبل از ارسال این داده‌ها به مربی پست کنترل می‌کنیم . این برای تعدادی از دلایل ایده‌آل نیست . اول ، داده‌های پست ممکن است بزرگ باشند . در واقع ممکن است یک فایل بارگذاری باشد که در آن بافر آن را در حافظه ذخیره می‌کند و یا حتی ممکن نیست . در حالت ایده‌آل ، ما نوعی جریان – imitator ایجاد می‌کنیم که می‌تواند برای محدود کردن خود به بایت طول محتوا آماده شود ، اما در غیر این صورت به عنوان یک جریان معمولی عمل می‌کند . این امر به مربی چاپار اجازه می‌دهد تا داده‌ها را مستقیما از جریان خارج کند بدون اینکه سربار بافر در حافظه باشد . با این حال ، این کد بسیار بیشتر است . در بسیاری از سرورهای جاسازی‌شده HTTP ، درخواست‌های پست لازم نیست ، بنابراین ما از این وضعیت با محدود کردن داده‌های ورودی پست به بیش از ۱۰ MB اجتناب می‌کنیم
    ساده‌سازی دیگر این سرور ساده ، نوع محتوایی داده‌های بازگشت است . در پروتکل HTTP ، سرور همیشه مرورگر MIME را که باید انتظار آن را داشته باشد ، ارسال می‌کند . شما می‌توانید ببینید که این سرور همیشه یک نوع محتوا / html را نشان می‌دهد . اگر می‌خواهید انواع دیگر محتوا را باز کنید ، باید این روش را گسترش دهید تا به مربی خود اجازه داده شود تا قبل از ارسال داده‌ها به مشتری پاسخ دهد .

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *