Email: me.dev@developit.ir

نوشتن کد غیر همزمان در PHP با استفاده از icicle

PHP به طور معمول از روش برنامه نویسی همزمان استفاده میکند، با این وجود میتواند برای ایجاد برنامه هایی با زمان اجرای طولانی هم مورد استفاده قرار گیرد. چنین برنامه هایی اغلب باید فورا تعداد بسیاری وظیفه/task را بدون مسدود شدن وظایف انجام دهند.

عملیات غیر همزمان اجازه میدهد تعداد زیادی وظیفه بدون مسدود شدن انجام شوند اما PHP بدون استفاده از کتابخانه های کمکی نمیتواند چنین کاری را انجام دهد.

Icicle یک کتابخانه PHP است برای تسهیل نوشتن کد غیر همزمان با استفاده از روش برنامه نویسی هم زمان.

نوشتن و خطایابی کد غیر همزمان به دلیل اینکه متکی به callback توابع هستیم و عموما نمیتوان مقادیر یا throw exceptions را بازگرداند مشکل است.

یکی از بسته های قابل استفاده در icicle، بسته HTTP است که به منظور راه اندازی یک HTTP/1.1 server و client غیر همزمان استفاده میشود.

مانند سایر component های icicle، این کتابخانه هم از coroutines ساخته شده توسط awaitables و generators برای پیاده سازی برنامه نویسی غیر همزمان استفاده میکند.

 

به عنوان مثال، کد زیر یک HTTP server ساده را ایجاد کرده که در پاسخ تمام درخواست ها جمله Hello, world! را چاپ میکند.

require 'vendor/autoload.php';use Icicle\Http\Message\BasicResponse;use Icicle\Http\Message\Request;use Icicle\Http\Message\Response;use Icicle\Http\Server\RequestHandler;use Icicle\Http\Server\Server;use Icicle\Socket\Socket;use Icicle\Loop;$server = new Server(new class implements RequestHandler {    public function onRequest(Request $request, Socket $socket)    {        $response = new BasicResponse(Response::OK, [            'Content-Type' => 'text/plain',        ]);        yield from $response->getBody()->end('Hello, world!');        yield $response;    }    public function onError($code, Socket $socket)    {        return new BasicResponse($code);    }});$server->listen(8080);Loop\run();
این مطلب آخرین بار در تاریخ 1396/06/07 - 17:23 ویرایش شده است.

ارسال نظر
2 نظر
یوشا در تاریخ 1395/11/28 - 00:37 نوشته:
اوه عذر میخوام ظاهراً هم multi-threading هه هم متغیرهای concurrency nonblocking دارهالان دیدم D:(این فرم کامنت بعد از ارسال، پیام رو هم کوکی می کنه و در این تکس باکس نگه میداره. همچنین مقدار کپچای قدیمی وارد شده رو.)
پاسخ احسان:
http://reactphp.orgرو هم ببین، من هنوز فرصت نکردم در موردش چیزی بنویسم. سر فرصت این کارُ میکنم.

یوشا در تاریخ 1395/11/28 - 00:33 نوشته:
من با این کتابخونه کار نکردم، اما بگمونم بخش notification ش async هه، و نه همش...از اونجایی که هنگام انجام عملیات IO آسنکرون معمولاً از parallel خارج میشه و چون این کتابخانه multi-thread نیست(؟) فقط notification بیس میشه - مگراینکه non-blocking باشهمطمعن نیستما البتهولی کتابخونه شاخی باید باشه

عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید