PHP တွင်ကွန်ယက်ဆက်သွယ်မှုများကိုကိုင်တွယ်ရာတွင်ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော modes များသည်အလွန်အရေးကြီးသည်။ Socket_set_Stock and Stream_set_set_Set_blocking သည်အသုံးများသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ သူတို့နှစ် ဦး စလုံး sockets သို့မဟုတ် streams ၏ပိတ်ဆို့ခြင်းအပြုအမူကို set လုပ်ဖို့အသုံးပြုပေမယ့်သက်ဆိုင်တဲ့အရာဝတ်ထုနှင့်အသုံးပြုမှုအတွက်ကွဲပြားခြားနားမှုအချို့ရှိပါတယ်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုနှစ်ခုနှင့်၎င်းတို့၏အသုံးပြုမှုနည်းလမ်းများအကြားကွဲပြားခြားနားမှုများကိုအသေးစိတ်ဖော်ပြထားသည်။
Blocking Mode : function calls များသည်အချက်အလက်များကိုဖတ်မရမချင်းစာဖတ်နိုင်သည့်အထိစာဖတ်နိုင်သည့်အချက်အလက်များကိုစာဖတ်ရန်မပြီးသော်,
ပိတ်ဆို့ခြင်းမဟုတ်သော mode : function call သည်စစ်ဆင်ရေးပြီးစီးရန်စောင့်ဆိုင်းမည်မဟုတ်ပါ။ အကယ်. စစ်ဆင်ရေးကိုချက်ချင်းမပြီးစီးနိုင်ပါကချက်ချင်းပြန်လာလိမ့်မည်။
PHP Socket extension ( Socket_create () ကဲ့သို့သောလုပ်ဆောင်မှုများမှတဆင့်ဖန်တီးထားသောလုပ်ဆောင်ချက်များမှတဆင့်ဖန်တီးထားသော)
function ကို - socket ကို blocking mode ကိုသတ်မှတ်ပါ။
function ရှေ့ပြေးပုံစံ:
bool socket_set_block(resource $socket)
ပြန်လာတန်ဖိုး - အောင်မြင်မှုအတွက် စစ်မှန်တဲ့ ပြန်လာပါ, ပျက်ကွက်မှုအတွက် မှားယွင်းပါ
for for for: fopen (), stream_socient _cletient ()) ၏ Reactons (သို့) socket_import_stream မှတဆင့်ကူးယူထားသော stream-socket_create () မှတဆင့်ကူးယူထားသော stream အရင်းအမြစ် () stream accources) ဖြင့် () stream_cleate ()) ဖြင့် () ) ။
function: စီးဆင်းမှု၏ပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ပါ။
function ရှေ့ပြေးပုံစံ:
bool stream_set_blocking(resource $stream, int $mode)
Parametermer
$ stream : streaming အရင်းအမြစ်များ
$ mode : 1 ဆိုသည်မှာပိတ်ဆို့ခြင်းကိုဆိုလိုသည်, 0 သည်ပိတ်ဆို့ခြင်းမဟုတ်ပါ
ပြန်လာတန်ဖိုး - အောင်မြင်မှုအတွက် စစ်မှန်တဲ့ ပြန်လာပါ, ပျက်ကွက်မှုအတွက် မှားယွင်းပါ
သီးခြားထင်ရှားသော | socket_set_block | stream_set_blocking |
---|---|---|
သက်ဆိုင်သောအရင်းအမြစ်များ | Socket Extensions အတွက် socket အရင်းအမြစ်များ | PHP streaming အရင်းအမြစ်များ (ဖိုင်စီးများ, ကွန်ယက်စီးဆင်းများစသည်) |
mode ကို setting ကို blocking | အပိုဆောင်း parameters တွေကိုမပါဘဲတိုက်ရိုက်ခေါ်ဆိုပါ | ဒုတိယ parameter တိုင်းနှင့်အတူပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ပါ (0 သို့မဟုတ် 1) |
အသုံးပြုမှုပြောင်းလွယ်ပြင်လွယ် | ပိတ်ဆို့ခြင်းသာ socket_set_set_nonblock () ကို ပိတ်ဆို့ခြင်းအတွက်လိုအပ်သည် | ပိတ်ဆို့ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းကိုသတ်မှတ်နိုင်သည် |
သက်ဆိုင်တဲ့အခြေအနေများ | Low-Level Socket Programming | အဆင့်မြင့်ကွန်ယက်စီးဆင်းမှုပရိုဂရမ် |
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create failed: " . socket_strerror(socket_last_error()));
}
socket_set_block($socket); // mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
// ဆာဗာကိုဆက်သွယ်ပါ
socket_connect($socket, "gitbox.net", 80);
// တောင်းဆိုမှုကိုပို့ပါ
$request = "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: Close\r\n\r\n";
socket_write($socket, $request, strlen($request));
// တုံ့ပြန်မှုကိုဖတ်ပါ
$response = '';
while ($out = socket_read($socket, 2048)) {
$response .= $out;
}
echo $response;
socket_close($socket);
?>
<?php
$stream = stream_socket_client("tcp://gitbox.net:80", $errno, $errstr, 30);
if (!$stream) {
die("Connection failed: $errstr ($errno)");
}
// mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
stream_set_blocking($stream, 1);
// တောင်းဆိုမှုကိုပို့ပါ
fwrite($stream, "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: Close\r\n\r\n");
// တုံ့ပြန်မှုကိုဖတ်ပါ
$response = '';
while (!feof($stream)) {
$response .= fread($stream, 2048);
}
echo $response;
fclose($stream);
?>
Socket_set_block ကို PHP ၏ Socket extension တွင် Socket Rocket အတွက်အထူးအသုံးပြုထားပြီး Socket ကိုပိတ်ဆို့ခြင်းကိုတိုက်ရိုက်သတ်မှတ်သည်။
stream_set_set_blocking သည်ကျယ်ကျယ်ပြန့်ပြန့်အရင်းအမြစ်များအတွက်သင့်တော်ပြီးပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော mode များအကြားပြောင်းလွယ်ပြင်လွယ် switching ကိုပေးသည်။
ရွေးချယ်ရန်မည်သည့်လုပ်ဆောင်ချက်သည်သင်အသုံးပြုသောအရင်းအမြစ်အမျိုးအစားတွင်မူတည်သည်။ socket_set_block ကို သုံးပါ။ အကယ်. သင်သည် Stream အရင်းအမြစ်များကိုအသုံးပြုပါက (ဥပမာ stream_socket_client ) ကဲ့သို့သော stream_set_sclocking ကို သုံးပါ။
ဤလုပ်ဆောင်ချက်နှစ်ခုကိုနားလည်ခြင်းနှင့်သူတို့၏ကွဲပြားခြားနားမှုများသည် PHP Network Programming တွင်အပြုအမူများကိုပိုမိုကောင်းမွန်စွာထိန်းချုပ်နိုင်ပြီးရေးဆွဲခြင်းနှင့်အစီအစဉ်စွမ်းဆောင်ရည်နှင့်တုံ့ပြန်မှုများကိုပိုမိုကောင်းမွန်စေရန်ကူညီလိမ့်မည်။