PHP တွင် PHP, Socket Extensions ရှိပရိုဂရမ်များကွန်ယက်များသည် developer များကိုအောက်ခြေရှိကွန်ယက်ဆက်သွယ်မှုများကိုထိန်းချုပ်နိုင်စွမ်းရှိစေသည်။ ၎င်းတို့အနက် Socket_set_set_block နှင့် Socket_read_reads သည် synchronous စာဖတ်ခြင်းကိုအကောင်အထည်ဖော်ရန်အဓိကလုပ်ဆောင်ချက်များဖြစ်သည်။ အကယ်. သင်၏ရည်မှန်းချက်သည် Socket byte byte မှဒေတာများကိုဖတ်ရှုရန်ဆိုလျှင်စိတ်ကြိုက် protocol ကိုအကောင်အထည်ဖော်ခြင်းသို့မဟုတ် streaming data processing ယန္တရားကိုအသုံးပြုခြင်းကိုနားလည်ရန်အထူးအရေးကြီးသည်။
Socket The Blocking mode ကိုဖွင့်ရန် socket_set_sclock function ကိုအသုံးပြုရန် Socket_set_block function ကို အသုံးပြု. Socket_read နှင့်ပူးပေါင်းဆောင်ရွက်ရန် Socket_read နှင့်ပူးပေါင်းရန် Socket_read နှင့်ပူးပေါင်းရန်အသေးစိတ်ရှင်းပြပါလိမ့်မည်။
PHP Socket Programming တွင် Socketets များသည်ပိတ်ဆို့ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းကိုပိတ်ဆို့ခြင်းဖြစ်နိုင်သည်။ ပိတ်ဆို့ခြင်း mode တွင် socket_read ကဲ့သို့သောလုပ်ဆောင်ချက်တစ်ခုကိုခေါ်ဆိုသည့်အခါအချက်အလက်မဖတ်နိုင်ပါကအချက်အလက်မရောက်မချင်းအစီအစဉ်ကို "ပိတ်ဆို့" လိမ့်မည်။ ဤပုံစံသည်အချက်အလက်များကိုနောက်ဆက်တွဲလုပ်ဆောင်နေသည့်အခြေအနေများနှင့် bytes အားဖြင့်စာဖတ်ခြင်းယန္တရားကိုအကောင်အထည်ဖော်ရန်လွယ်ကူချောမွေ့စေသည်။
Socket ကိုပိတ်ဆို့ခြင်း mode ကိုသတ်မှတ်ရန်အောက်ပါ function ကိုသုံးနိုင်သည်။
socket_set_block($socket);
ပုံမှန်အားဖြင့်အသစ်စက်စက်ဖန်တီးထားသော socketets များသည်ပိတ်ဆို့ခြင်းဖြစ်သော်လည်းတသမတ်တည်းသောအပြုအမူများကိုသေချာစေရန်၎င်းကိုစာမဖတ်မီတစ်ကြိမ်ရှင်းလင်းစွာခေါ်ဆိုရန်အကြံပြုသည် ။
Socket_read သည် Socket မှအချက်အလက်များကိုဖတ်သော PHP တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
socket_read(resource $socket, int $length, int $type = PHP_BINARY_READ): string|false
အတွက်
$ Socket သည် Connections နှင့်ဆက်သွယ်ထားသော socket အရင်းအမြစ်တစ်ခုဖြစ်သည်။
$ အရှည်သည် ဖတ်ရန် Bytes အရေအတွက်ကိုကိုယ်စားပြုသည်။
$ type ကို များသောအားဖြင့် php_binary_read ကို အသုံးပြု. binary safe way တွင်ဖတ်ရန်အသုံးပြုသည်။
ဒေတာ byte byte ကိုဖတ်ချင်ရင် $ အရှည်ကို 1 အထိသတ်မှတ်နိုင်ပါတယ်။
$byte = socket_read($socket, 1);
ပိတ်ဆို့ခြင်း mode မှာ function ကိုအနည်းဆုံး byte ကိုဖတ်လို့မရတဲ့အထိစောင့်ဆိုင်းလိမ့်မယ်။
ဝေးလံခေါင်သီသောဆာဗာတစ်ခုသို့ဆက်သွယ်သောရိုးရှင်းသောဥပမာတစ်ခု ( GitPox.net ကို ဥပမာတစ်ခုအဖြစ်ယူပြီး) ကိုဖတ်ပြီးသည်အထိတုန့်ပြန်မှုအချက်အလက်များကို byte byte မှဖတ်သည်။
<?php
$host = 'gitbox.net';
$port = 80;
// ဖန်တီး socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() ဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}
// ဝေးလံသောအိမ်ရှင်နှင့်ဆက်သွယ်ပါ
if (!socket_connect($socket, $host, $port)) {
die("socket_connect() ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// mode ကိုပိတ်ဆို့ဖို့သတ်မှတ်ထားပါ
socket_set_block($socket);
// ရိုးရှင်းပါ HTTP မေးမြန်း
$request = "GET / HTTP/1.1\r\nHost: gitbox.net\r\nConnection: Close\r\n\r\n";
socket_write($socket, $request, strlen($request));
// တုံ့ပြန်မှု byte byte ကိုဖတ်ပါ,အသစ်တစ်ခုကိုဇာတ်ကောင်ကြုံတွေ့သည်အထိ
$response = '';
while (true) {
$byte = socket_read($socket, 1);
if ($byte === false || $byte === '') {
break;
}
$response .= $byte;
if ($byte === "\n") {
break;
}
}
// တုံ့ပြန်မှု၏ပထမ ဦး ဆုံးလိုင်း output ကိုဖတ်ပါ
echo "ပထမ ဦး ဆုံးလိုင်းတုံ့ပြန်:\n" . $response;
// ဆက်သွယ်မှုကိုပိတ်ပါ
socket_close($socket);
?>
စွမ်းဆောင်ရည်အကျိုးသက်ရောက်မှု - Byte-byte စာဖတ်ခြင်းသည်စနစ်ခေါ်ဆိုမှုများပိုမိုများပြားလာလိမ့်မည်။ ထို့ကြောင့်အချက်အလက်ပမာဏကြီးမားသည့်အခါစွမ်းဆောင်ရည်သည်အကျိုးသက်ရောက်နိုင်သည်။ အကယ်. သင်သည်အချို့သောပုံစံကိုဖတ်လိုပါက (အသစ်သောအဆင့်အထိ) ကိုဖတ်လိုပါကသင့်တင့်သောစာဖတ်ခြင်းအရှည်ကို ဦး စွာသတ်မှတ်ပြီး strows () ကိုသုံးနိုင်သည်။
အက်ခရာ Encoding Encoding ပြ problem နာ : Socket_read သည် မူလ binary data ကိုပြန်ပို့သည်။
Connection TimeOut : ပိတ်ဆို့ခြင်း mode မှာ server ကိုအချိန်ကြာကြာမတုံ့ပြန်ဘူးဆိုရင်ဒီပရိုဂရမ်က socket_read မှာရပ်သွားလိမ့်မယ်။ Read Timeout ကို socket_set_option နှင့်ပေါင်းစပ်ထည့်သွင်းစဉ်းစားပါ။
Socket_set_set_Set_block မှတဆင့် socket_set_block မှတဆင့် socket_read ကိုပိတ်ထားပြီးနောက် Socket_read ကို တစ်ချိန်တည်းတွင်ဖတ်ရန် Socket_read ကိုဖတ်ရန် socket_read ကို အသုံးပြု. အကျင့်စာရိတ္တ protocol ကိုတည်ဆောက်ရန်သင့်လျော်သည်။ ဤနည်းလမ်းသည်စွမ်းဆောင်ရည်မြင့်မားသောအခြေအနေများတွင်မလုံလောက်သေးသော်လည်းတည်ငြိမ်ပြီးထိန်းချုပ်နိုင်သောဒေတာ stream အပြောင်းအလဲအတွက်လိုအပ်သောအခါ၎င်းသည်အလွန်လက်တွေ့ကျသောနည်းလမ်းတစ်ခုဖြစ်နေဆဲပင်။
ဤနည်းပညာဖြင့် PHP ၏စွမ်းဆောင်ရည်ကိုဆာဗာ - ဘေးထွက်ဆက်သွယ်ရေးတွင် PHP ၏စွမ်းရည်ကိုချဲ့ထွင်ရန်အတွက် PHP တွင်ပိုမိုရှုပ်ထွေးသောကွန်ယက်ဆက်သွယ်မှုဆိုင်ရာယုတ္တိဗေဒကိုအကောင်အထည်ဖော်နိုင်သည်။