PHP Network Programming တွင် stream_socket_shutdown function ကိုတစ် ဦး ဦး တည်ချက်ကိုပိတ်ထားရန် (ဖတ်, ရေး, ရေး, ရေး, သို့မဟုတ်နှစ် ဦး စလုံး) ကိုပိတ်ရန်အသုံးပြုသည်။ သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင်များစွာသော developer များစွာသည်ပုံမှန်မဟုတ်သောဆက်သွယ်မှုပြတ်တောက်ခြင်း, သုံးစွဲသူများပြတ်တောက်ခြင်း, client justs robsock ား , ဤဆောင်းပါးသည် stream_socket_shutownowns of stream_socket_shutowndowns ၏အလုပ်ယန္တရားကိုဆန်းစစ်ကြည့်ရှုလိမ့်မည်, ဆက်စပ်ခြွင်းချက်များ၏အကြောင်းရင်းများကိုစူးစမ်းလေ့လာပါလိမ့်မည်။
stream_socket_shutdown ရဲ့ function ကတော့အောက်ပါအတိုင်းဖြစ်သည် -
bool stream_socket_shutdown(resource $stream, int $how)
$ stream : Open Socket Stream သယံဇာတအရင်းအမြစ်။
$ ဘယ်လို - ဦး တည်ချက်ကိုပိတ်ပါ, တန်ဖိုးကိုယူပါ။
Steam_shut_rd (0) စာဖတ်ခြင်းလမ်းညွှန်ကိုပိတ်ပါ
Steam_shut_wr (1) Write လမ်းညွှန်ကိုပိတ်ပါ
Stream_shut_rdwr (2) ဖတ်ပြီးလမ်းညွှန်များကိုပိတ်ပါ
ဥပမာအားဖြင့်:
$socket = stream_socket_client("tcp://m66.net:8080", $errno, $errstr, 30);
if (!$socket) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: $errstr ($errno)");
}
// အရေးအသား ဦး တည်ချက်ကိုပိတ်ပါ,ဒေတာကိုမရှိတော့ကြောင်းဖော်ပြသည်
stream_socket_shutdown($socket, STREAM_SHUT_WR);
stream_socket_shutdown ကိုခေါ်ပြီးနောက် Socket ၏လမ်းကြောင်းကိုပိတ်ထားပြီး kernel သည် connection ကိုပိတ်ထားကြောင်းဖော်ပြသည်။
ခြွင်းချက်၏အဓိကအကြောင်းရင်းမှာ stream_socket_shutownown ကို အသုံးပြုသောအခါ client သို့မဟုတ် server သည် connection ၏ shutdown signal ကိုမှန်ကန်စွာကိုင်တွယ်နိုင်ခြင်းမရှိသေးသော်လည်းပိတ်ပွဲအမိန့်သည်မသင့်လျော်ပါ။ အထူးသဖြင့်ထင်ရှားသည်:
Transline Dire ကိုကြိုတင်ပိတ်ပါ။
တစ်ချိန်တည်းမှာပင်ဖတ်ရန်နှင့်ရေးရန်လမ်းညွှန်ကိုပိတ်ထားသော်လည်း ဒေတာများကိုမဖတ်ပါ, ဒေတာဆုံးရှုံးမှုကိုရရှိခြင်းမရှိပါ။
Write လမ်းညွှန်ကိုပိတ်ပြီးနောက်ကျန်အချက်အလက်များကိုအချိန်မီဖတ်ခြင်းမဟုတ်ပါ ။ ပုံမှန်မဟုတ်သောဆက်သွယ်မှုတစ်ခုဖြစ်ပေါ်စေသည်။
Fin packet ကိုသက်တူရွယ်တူများကမအောင်မြင်ပါ။ အချိန်ကုန်ခြင်းနှင့်အဆက်ဖြတ်ခြင်းနှင့်ဆက်စပ်မှုကိုဖြစ်ပေါ်စေသည် ။
ဤပြ problems နာများသည် TCP Long Connection သို့မဟုတ် Duplex ဆက်သွယ်ရေးအခြေအနေများတွင်အထူးသဖြင့်ဖြစ်ပေါ်လေ့ရှိသည်။
သင်ဒေတာများကိုသာပို့။ ထပ်မံရေးရန်မစီစဉ်ပါကခေါ်ဆိုပါ။
stream_socket_shutdown($socket, STREAM_SHUT_WR);
ဆိုလိုသည်မှာရေးရန် ဦး တည်ချက်ကိုပိတ်ထားသော်လည်းစာဖတ်ခြင်းလမ်းကြောင်းကိုဆက်လက်ထိန်းသိမ်းထားဆဲဖြစ်သည်။
ဆာဗာနှင့် client နှစ် ဦး စလုံးသည်ပထမ ဦး ဆုံးရေးသားထားသောလမ်းကြောင်းကို ဦး စားပေးရန်လိုလျှင်သက်တူရွယ်တူသည်ကျန်ရှိသောအချက်အလက်များကိုဖတ်ရန်အချိန်အလုံအလောက်ရှိကြောင်းသေချာပါစေ။
Write လမ်းညွှန်ကိုပိတ်ပြီးသည့်နောက်တွင်ဆက်သွယ်မှုသည်အချက်အလက်များကိုဆက်လက်ဖတ်ရှုနိုင်သည်။ အထွေထွေချဉ်းကပ်မှုမှာ -
// အရေးအသား ဦး တည်ချက်ကိုပိတ်ပါ
stream_socket_shutdown($socket, STREAM_SHUT_WR);
// ရွယ်တူချင်းဒေတာကိုဖတ်ရှုရန်ဆက်လက်EOF
while (!feof($socket)) {
$data = fread($socket, 8192);
if ($data === false) {
break;
}
// အချက်အလက်များကိုထုတ်ယူခြင်း
}
အဘယ်သူမျှမအမွေဒေတာကိုမဖတ်ပါစေနှင့်
ပထမ ဦး စွာအရေးအသား ဦး တည်ချက်ကိုပိတ်ပြီးပို့မည့်ရွယ်တူချင်းအချက်အလက်များကိုအကြောင်းကြားပါ။
ရွယ်တူချင်းပြန်လာနိုင်သည့်အချက်အလက်များကိုဖတ်ပါ။
စာဖတ်ပြီးနောက်, စာဖတ်ခြင်းလမ်းညွှန်ကိုပိတ်ပါသို့မဟုတ်ဆက်သွယ်မှုတစ်ခုလုံးကိုပိတ်ပါ။
connection connects ကိုပိတ်ဆို့ခြင်းကိုရှောင်ရှားရန်အချိန်ကိုဖတ်ရန်အချိန်ကိုဖတ်ရန်အချိန်ကိုဖတ်ရန် TimeT_set_timeout ကို အသုံးပြုပါ။
အောက်ပါဥပမာသည်ဆာဗာရှိလုံခြုံစိတ်ချရသောဆက်သွယ်မှုကိုရေးရန်မှန်ကန်သောနည်းလမ်းကိုပြသသည်။
$server = stream_socket_server("tcp://0.0.0.0:12345", $errno, $errstr);
if (!$server) {
die("ဆာဗာကိုမစတင်နိုင်ပါ: $errstr ($errno)");
}
$client = stream_socket_accept($server);
if ($client) {
// တုံ့ပြန်မှုဒေတာပေးပို့ပါ
fwrite($client, "Hello from server\n");
// အရေးအသား ဦး တည်ချက်ကိုပိတ်ပါ,အချက်အလက်မရှိတော့တဲ့ client ကိုအကြောင်းကြားပါ
stream_socket_shutdown($client, STREAM_SHUT_WR);
// client ကိုမှပေးပို့သောအချက်အလက်များကိုဆက်လက်ဖတ်ရှုပါ
while (!feof($client)) {
$data = fread($client, 8192);
if ($data === false || $data === "") {
break;
}
echo "client ကိုဒေတာကိုလက်ခံရရှိခဲ့သည်: $data\n";
}
// ဆက်သွယ်မှုကိုပိတ်ပါ
fclose($client);
}
fclose($server);
စာဖတ်ခြင်းကိုမဖွင့်ပါနှင့်ဆက်သွယ်ရေးမရှိတော့ကြောင်းမသေချာပါကမသေချာပါနှင့်။
ရှည်လျားသောဆက်သွယ်မှုများအတွက်, stream_socket_shutdown ကို မကြာခဏခေါ်ဆိုရန်မကြာခဏခေါ်ဆိုမှုကိုရှောင်ကြဉ်ပါ။
client နှင့် server ၏ protocol ဒီဇိုင်းသည် connection ပိတ်ခြင်း၏အချိန်နှင့်အမိန့်အကြောင်းသေချာစေရန်သေချာပါစေ။
ပိတ်ဆို့ခြင်းကိုကာကွယ်ရန် Stream_set_set_set_set_timeout ကို သုံးပါ။
Steam_socket_shutdown သည် socket connection များကိုပိတ်ခြင်းအတွက်အရေးကြီးသောကိရိယာတစ်ခုဖြစ်သည်။ သို့သော်မသင့်လျော်သောအသုံးပြုမှုသည်ပုံမှန်မဟုတ်သောဆက်သွယ်မှုပြတ်တောက်မှုများကိုအလွယ်တကူ ဦး တည်သွားနိုင်သည်။ ၎င်း၏ပိတ်ပစ်မှု၏ semantics ကိုနားလည်ခြင်း, ပိတ်ခြင်းလမ်းကြောင်းကိုကျိုးကြောင်းဆီလျော်စွာရွေးချယ်ခြင်းနှင့်ပိတ်ခြင်းပြီးနောက်အချက်အလက်များ၏စာဖတ်ခြင်းနှင့်ရေးသားခြင်းအမိန့်ကိုသေချာစေရန်ပြ problems နာများကိုရှောင်ရှားရန်နှင့်ဖြေရှင်းရန်သော့ချက်ဖြစ်သည်။ မှန်ကန်သောအချိန်သတ်မှတ်ချက်များနှင့်ခြွင်းချက်ကိုင်တွယ်ခြင်းနှင့်ခြွင်းချက်ကိုင်တွယ်ခြင်းက PHP ကွန်ယက်အစီအစဉ်များကိုပိုမိုတည်ငြိမ်ပြီးယုံကြည်စိတ်ချရစေနိုင်သည်။