سلام! من به عنوان یک تأمین کننده راکتور ، اغلب از من سؤال می شود که کدام زبان های برنامه نویسی می توانند الگوی راکتور را پیاده سازی کنند. خوب ، بیایید درست به داخل آن شیرجه بزنیم و گزینه ها را کشف کنیم.
اول از همه ، الگوی راکتور چیست؟ این یک الگوی رسیدگی به رویداد برای برنامه های تک رشته ای یا چند رشته ای است. این برنامه به یک برنامه اجازه می دهد تا چندین درخواست ورودی را همزمان بدون مسدود کردن موضوع اصلی انجام دهد. این در ساخت سرورهای با کارایی بالا و برنامه های شبکه بسیار مفید است.


پیتون
پایتون یک انتخاب محبوب برای اجرای الگوی راکتور است. یادگیری آن آسان است ، دارای یک کتابخانه استاندارد بزرگ و یک جامعه پر جنب و جوش است. دربی پرواکتابخانه در پایتون یک API سطح بالا برای نوشتن کد ناهمزمان با استفاده از الگوی راکتور فراهم می کند.
وارد کردن asyncio async def handle_client (خواننده ، نویسنده): data = await reader.read (100) پیام = data.decode () addr = writer.get_extra_info ('peername') print (f "دریافت {پیام} از {addr}") نویسنده. اصلی (): سرور = await asyncio.start_server (handle_client ، '127.0.0.1' ، 8888) addr = server.sockets [0] .getsockname () print (f'serving on {addr} ') async با سرور: await server.serve_forever_forever () asyncio.
در این مثال ،بی پروااز یک حلقه رویداد (که در قلب الگوی راکتور است) برای کنترل چندین اتصالات مشتری به صورت غیر همزمان استفاده می کند. سادگی پایتون آن را به یک نقطه شروع عالی برای توسعه دهندگان جدید در الگوی راکتور تبدیل می کند.
جاوا
جاوا یک زبان قدرتمند دیگر است که می تواند الگوی راکتور را پیاده سازی کند. بسته Java Nio (غیر مسدود کردن I/O) ابزارهای لازم را ارائه می دهد. درانتخاب کنندهکلاس در Java Nio به عنوان راکتور عمل می کند و چندین کانال را برای رویدادهای I/O نظارت می کند.
وارد کردن java.io.ioexception ؛ وارد کردن java.net.inetsocketaddress ؛ وارد کردن java.nio.bytebuffer ؛ واردات java.nio.channels.selectionkey ؛ وارد کردن java.nio.channels.selector ؛ وارد کردن java.nio.channels.serversocketchannel ؛ وارد کردن java.nio.channels.socketchannel ؛ وارد کردن java.util.iterator ؛ وارد کردن java.util.set ؛ کلاس عمومی REACTORSERVER {خصوصی درگاه نهایی استاتیک int = 8888 ؛ عمومی خالی استاتیک اصلی (رشته [] args) IoException را پرتاب می کند {انتخاب کننده انتخاب = انتخاب کننده. open () ؛ Serversocketchannel Serversocketchannel = Serversocketchannel.open () ؛ serversocketchannel.socket (). bind (inetsocketAddress جدید (پورت)) ؛ serversocketchannel.configureblocking (false) ؛ Serversocketchannel.Register (انتخاب کننده ، SelectionKey.op_accept) ؛ در حالی که (درست) {Selector.Select () ؛ set <SelectionKey> SelectedKeys = Selector.SelectedKeys () ؛ iterator <SelectionKey> keyiterator = SelectedKeys.Iterator () ؛ در حالی که (keyiterator.hasnext ()) {انتخاب کلید = keyiterator.next () ؛ if (key.isacceptable ()) {serversocketchannel ssc = (serversocketchannel) key.channel () ؛ socketchannel sc = ssc.accept () ؛ SC.ConfigureBlocking (نادرست) ؛ SC.Register (انتخاب کننده ، SelectionKey.op_read) ؛ } other if (key.isreadable ()) {socketchannel sc = (socketchannel) key.channel () ؛ Bytebuffer Buffer = ByteBuffer.Allocate (1024) ؛ int bytesread = sc.read (بافر) ؛ if (bytesread> 0) {buffer.flip () ؛ byte [] data = بایت جدید [buffer.limit ()] ؛ buffer.get (داده) ؛ system.out.println (رشته جدید (داده)) ؛ }} keyiterator.remove () ؛ }}}
تایپ و عملکرد قوی جاوا ، آن را برای ساخت و ساز در مقیاس بزرگ ، تولید - برنامه های آماده که به الگوی راکتور متکی هستند ، مناسب می کند.
C ++
C ++ یک زبان با عملکرد بالا است که می تواند الگوی راکتور را به طور مؤثر پیاده سازی کند. کتابخانه Boost.asio در C ++ مجموعه کاملی از ابزارهای برنامه نویسی I/O ناهمزمان را ارائه می دهد.
#include <ioStream> #include <boost/asio.hpp> با استفاده از تقویت :: asio :: ip :: tcp ؛ جلسه کلاس: std عمومی :: enable_shared_from_this <session> {عمومی: جلسه (tcp :: سوکت سوکت): socket_ (std :: حرکت (سوکت)) {} شروع باطل () {do_read () ؛ } خصوصی: void do_read () {auto self (shared_from_this ()) ؛ BOOST :: ASIO :: ASYNC_READ_UNTIL (Socket_ ، Buffer_ ، '\ n' ، [this ، self] (Boost :: system :: error_code ec ، std :: size_t طول) {if (! ec) {do_write (طول) ؛}}) ؛ } void do_write (std :: size_t طول) {auto self (shared_from_this ()) ؛ Boost :: Asio :: Async_write (Socket_ ، Boost :: Asio :: Buffer (Buffer_.data () ، طول) ، [این ، خود] (Boost :: system :: erron_code ec ، std :: size_t /*طول* /) {if (! ec) {do_read () {do_read () ؛ } tcp :: سوکت سوکت_ ؛ تقویت :: asio :: streambuf buffer_ ؛ } ؛ Class Server {عمومی: سرور (تقویت :: asio :: io_context & io_context ، درگاه کوتاه): پذیرشگر_ (io_context ، tcp :: نقطه پایانی (tcp :: v4 () ، پورت)) ، سوکت_ (io_context) {do_accept () ؛ } خصوصی: void do_accept () {پذیرشگر_.Async_Accept (socket_ ، [this] (boost :: system :: erron_code ec) {if (! ec) {std :: make_shared <session> (std :: حرکت (سوکت _))-> start () ؛} do_accept () ؛}) ؛ } tcp :: پذیرنده پذیرنده_ ؛ TCP :: سوکت سوکت_ ؛ } ؛ int main () {سعی کنید {تقویت :: asio :: io_context io_context ؛ سرور S (io_context ، 8888) ؛ io_context.run () ؛ } گرفتن (std :: استثنا و e) {std :: cerr << "استثنا:" << e.what () << "\ n" ؛ } بازگشت 0 ؛ }
C ++ به شما کنترل ریز و درشت بر منابع سیستم می دهد ، که برای برنامه های دارای نیازهای با کارایی بالا بسیار مهم است.
جاذب
JavaScript ، به ویژه در محیط Node.js ، برای الگوی راکتور مناسب است. node.js از یک رویداد - محور ، غیر مسدود کننده مدل I/O استفاده می کند ، که بر اساس الگوی راکتور است.
const net = نیاز ("خالص") ؛ const server = net.createServer ((سوکت) => {socket.on ('data' ، (data) ، (data) => {console.log (`دریافت: $ {data.tostring ()}`) ؛ سوکت. write (data) ؛ socket.on ('end' ، () => {consolection ؛ server.on ('خطا' ، (err) => {پرتاب خطا ؛}) ؛ server.listen (8888 ، () => {console.log ('سرور در پورت 8888' گوش می دهد) ؛}) ؛
Nature Nature - Threaded ، Event - Event - Nature ، ساخت برنامه های واقعی مانند سرورهای گپ و سوکت های وب را آسان می کند.
ملاحظات دیگر
هنگام انتخاب یک زبان برنامه نویسی برای اجرای الگوی راکتور ، باید زیرساخت های موجود و مهارت های تیم توسعه خود را نیز در نظر بگیرید. به عنوان مثال ، اگر تیم شما با پایتون بیشتر آشنا است ، حتی اگر جاوا یا C ++ عملکرد بهتری را در برخی از سناریوها ارائه دهند ، ممکن است انتخاب بهتری باشد.
علاوه بر این ، ما همچنین تجهیزات مرتبط مانندبرج سلببابرج کوچکوتمبدل حرارتی لوله Uبشر این محصولات به گونه ای طراحی شده اند که با راکتورهایی که ارائه می دهیم ، هماهنگ باشد و از عملکرد بهینه در فرآیندهای صنعتی شما اطمینان حاصل کند.
اگر به محصولات راکتور ما علاقه مند هستید یا در مورد اجرای الگوی راکتور در زبان های مختلف برنامه نویسی سؤالی دارید ، از دستیابی به بحث تهیه دریغ نکنید. ما اینجا هستیم تا به شما کمک کنیم بهترین تصمیمات را برای پروژه های خود بگیرید.
منابع
- "کتاب آشپزی پایتون" توسط دیوید بیزلی و برایان K. جونز
- "جاوا مؤثر" توسط جوشوا بلوچ
- "C + + Primer" توسط استنلی لیپمن ، خوزه لاجوئی و باربارا مو
- "جاوا اسکریپت: راهنمای قطعی" توسط دیوید فلاناگان
