با سلام به همه دوستان
دوستان می خواستم بدونم Numlocking API چیه ؟ البته اگر تلفظش رو درست بیان کرده باشم. چون فقط اسمش رو من شنیدم. هر چی هم توی اینترنت درباره اش گشتم چیزی پیدا نکردم.
ممنون میشم دوستانی که درباره اش اطلاعاتی دارن و یا منبعی برای معرفیش می شناسن به من معرفی کنن. با تشکر ...
سلام. اسمش non-blocking API هست بدین معنی که شما میتونید چندین کار رو همزمان انجام بدید بدون اینکه یک کار باعث وقفه در کار دیگر شود.
مثلا در زبان برنامه نویسی php کدها خط به خط اجرا میشن یعنی اگر شما در یک خط درخواست خواندن فایلی را بدهید تا زمانی که فایل خوانده نشود خطوط پایین تر اجرا نمیشن. اما در nodejs این امکان وجود داره که درخواست خواندن فایلی را بدهید و همزمان تا هنگامی که فایل خوانده شود کارهای دیگری به صورت موازی میتوانید انجام دهید.
@khanzadimahdi
در PHP شما امکان نوشتن برنامه به صورت Async رو دارید.
برای مثالی که خودتون فرمودید کتابخانه Guzzle این امکان رو میده
و برای سایر کار ها amphp.org به خوبی جواب میده
@proamirm
در php قابلیت async وجود نداره. شما میتونید درخواست ها رو به صورت async از سمت کلاینت به php ارسال کنید اما اینکه درون یک درخواست کارهای موازی انجام بدید قابلیتش به صورت بومی درون php نیست.
کتابخانه guzzle امکان نوشتن async رو نمیده و اصلا کارش مرتبط با این موضوع نیست. کار این کتابخانه ایجاد درخواست در محیط http هست.
بهتره قبل از صحبت درباره این موضوع کمی با nodejs کار کنید تا درک کاملتری پیدا کنید.
بسیار ممنونم از پاسخ هاتون.
من حقیقتش دارم با NodeJs پروژه ای رو انجام میدم و از من خواستن که از non-blocking API استفاده کنم.
چیزی که من هنوز متوجه نشدم اینه که : خب من چطور باید از non-blocking API استفاده کنم ؟ و منظور از کلمه API که بعد از non-blocking میاد چیه آیا این یک نوع API هست؟ آیا Nodejs ذاتا به این شکل عمل می کنه و یا باید پکیجی رو نصب کرد که چنین کاری رو انجام بده ؟
@raeisialireza110
درون nodejs دستوراتی که async نیستن انتهاشون کلمه ی sync وجود داره.
داکیومنت خود nodejs رو مطالعه کنید.
پروژه ای که انجام میدین بررسی کنید API هست یا وبسایت! در کل منظور از non-blocking api دستورات async هست و معنا و مفهومی به غیر از این نداره.
تکنیک های جاوا اسکریپتی هم وجود داره (مثلا promise) یه نگاهی به لینک زیر بیندازید
@khanzadimahdi
شما فرمودید در php ممکن نیست وقتی مثلا یک صفحه رو میخوایم بخونیم و منتظریم لود بشه، کار های دیگه ای رو انجام بدیم؛ بنده گفتم Guzzle همین امکان رو میده بهمون که تا وقتی یه درخواست مثلا GET ارسال میشه، سایر خطوط اجرا بشن.
برای سایر کار ها از طریق کتابخونه amphp.org شما میتونید همچین کاری انجام بدید.
در واقع بدون تکمیل شدن یه عملیات، سایر خطوط رو اجرا کنید و پس از پایان اون عملیات برگردید و پردازش های لازم رو انجام بدید.
هیچ ارتباطی هم به ارسال دزخواست از کاربر و ajax و اینا وجود نداره. در ترمینال هم میتونید این کار رو بکنید
بهتره قبل پاسخ ادرس هایی که دادم رو باز کنید که متوجه منظور بنده بشید
در مورد amphp بحثی نیست اما Guzzle این قابلیتی که گفتین رو نمیده و اصلا کارش async کردن نیست. اگه ممکنه یه مثال بزارید از guzzle که ران کنیم ببینیم چجوری میشه async نوشت باهاش!
@khanzadimahdi
یه سر به صفحه شروع سریع در داکیومنت این کتابخونه بزنید: http://docs.guzzlephp.org/en/stable/quickstart.html
$promise = $client->getAsync('http://httpbin.org/get');
$promise = $client->deleteAsync('http://httpbin.org/delete');
$promise = $client->headAsync('http://httpbin.org/get');
$promise = $client->optionsAsync('http://httpbin.org/get');
$promise = $client->patchAsync('http://httpbin.org/patch');
$promise = $client->postAsync('http://httpbin.org/post');
$promise = $client->putAsync('http://httpbin.org/put');
تمام متد های بالا به صورت async کار میکنن
و یه مثال تکمیلی تر مثلا:
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Exception\RequestException;
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$promise->then(
function (ResponseInterface $res) {
echo $res->getStatusCode() . "\n";
},
function (RequestException $e) {
echo $e->getMessage() . "\n";
echo $e->getRequest()->getMethod();
}
);
اطلاعات بیشترش تو داکیومنت خودش وجود داره.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟