၎င်းသည် websock protocol data များကိုလုပ်ဆောင်ရန်အသုံးပြုသော interface သို့မဟုတ် function တစ်ခုဖြစ်သည်။ အခြေခံ socket connection မှ websocket protocol နှင့်သက်ဆိုင်သောနောက်ထပ်သတင်းအချက်အလက်များကိုဖြည်ရန်တာ 0 န်ရှိသည်။
ဒေတာဘေ့စစစ်ဆင်ရေး <br> ဤဆောင်းပါးသည်ဒေတာဘေ့စ်နှင့်ချိတ်ဆက်ရန် PHP ၏ PDO Extension ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးရန်ဥပမာတစ်ခုအဖြစ် MySQL ကိုဥပမာတစ်ခုအဖြစ်ယူဆသည်။
PHP socket programming
PHP သည် Socket Services ကို ဖန်တီး. ကွန်ယက်အချက်အလက်များကိုနားထောင်နိုင်သည့် Socket နှင့်ဆက်စပ်သောလုပ်ဆောင်မှုများကိုပေးသည်။
PHP မှတစ်ဆင့် PHP မှတစ်ဆင့် socket 0 န်ဆောင်မှုကိုသတ်မှတ်ထားသော port သို့ချိတ်ဆက်ရန်နားထောင်ပါ။
Protocol နှင့်သက်ဆိုင်သောသတင်းအချက်အလက်များကိုဖြေရှင်းရန်ကွန်ယက်ဒေတာကိုကွန်ယက်ဒေတာကိုလက်ခံရရှိပြီးနောက် call socket_wsaprotocol_info_import ကို ရယူပါ။
parsed ဒေတာကို MySQL ဒေတာဘေ့စ်သို့သိမ်းထားပါ။
ကွန်ယက်အချက်အလက်များကိုသိုလှောင်ခြင်းနှင့်ရှာဖွေခြင်းကိုလွယ်ကူချောမွေ့စေရန်ကျိုးကြောင်းဆီလျော်သောဒေတာစားပွဲဝိုင်းဖွဲ့စည်းပုံကိုဒီဇိုင်းဆွဲပါ။
CREATE TABLE websocket_data (
id INT AUTO_INCREMENT PRIMARY KEY,
client_ip VARCHAR(45) NOT NULL,
protocol_info TEXT NOT NULL,
received_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
<?php
// ဒေတာဘေ့စ် configuration ကို
$dsn = 'mysql:host=gitbox.net;dbname=testdb;charset=utf8mb4';
$username = 'root';
$password = 'your_password';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("ဒေတာဘေ့စဆက်သွယ်မှုမအောင်မြင်ပါ: " . $e->getMessage());
}
// ဖန်တီး socket အစေခံ
$host = '0.0.0.0';
$port = 9501;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("ဖန်တီး socket ဆုံးရှုံး: " . socket_strerror(socket_last_error()));
}
if (!socket_bind($socket, $host, $port)) {
die("ချည်နေှာင် socket ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)));
}
if (!socket_listen($socket)) {
die("စောင့်ရေှာက် socket ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)));
}
echo "အစေခံ已启动,စောင့်ရေှာက်端口 $port\n";
while (true) {
$client = socket_accept($socket);
if ($client === false) {
echo "接受连接ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
// client ကိုရယူပါ IP
socket_getpeername($client, $client_ip);
// ဒေတာကိုဖတ်ပါ
$buffer = socket_read($client, 2048);
// ယူဆချက် socket_wsaprotocol_info_import ဒါဟာ parsing protocol ၏ function ကိုဖြစ်ပါတယ်
// ဤတွင်ကျွန်ုပ်တို့သည်တိကျသောအကောင်အထည်ဖော်မည့်အစား Pseudo-code ကိုအသုံးပြုသည်
$protocol_info = socket_wsaprotocol_info_import($buffer);
// ဒေတာဘေ့စ်ကိုထည့်ပါ
$stmt = $pdo->prepare("INSERT INTO websocket_data (client_ip, protocol_info) VALUES (?, ?)");
$stmt->execute([$client_ip, json_encode($protocol_info)]);
// Client Convice Connection
socket_close($client);
}
socket_close($socket);
/**
* အာရုံဖော်ခြင်း socket_wsaprotocol_info_import လုပ်ဆောင်ချက်
* သုံးသပ်ကြည့်ရှုခြင်း WebSocket သဘောတူညီချက်နှင့်သက်ဆိုင်သောသတင်းအချက်အလက်များ
*/
function socket_wsaprotocol_info_import(string $data): array {
// 这里应当实现真正的သုံးသပ်ကြည့်ရှုခြင်း逻辑,ဤဆောင်းပါးသည်နမူနာဒေတာကိုသာပြန်ပို့သည်
return [
'header' => substr($data, 0, 50),
'payload_length' => strlen($data),
'raw_data' => $data
];
}
လုံခြုံရေး ကွန်ရက်အချက်အလက်များတွင်အန္တရာယ်ရှိသောအကြောင်းအရာများပါဝင်နိုင်ပြီးဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားခြင်းမပြုမီလိုအပ်သော filtering နှင့်စိစစ်အတည်ပြုဆောင်ရွက်သင့်သည်။
စွမ်းဆောင်ရည်အကောင်းမြင် <br> <br> တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းဖြစ်စဉ်များတွင်စွမ်းဆောင်ရည်တိုးတက်စေရန် Asynchronous I / O သို့မဟုတ် Evol ကဲ့သို့မောင်းနှင်မှုအခြေခံမူဘောင်များကို အသုံးပြု. စဉ်းစားနိုင်သည်။
protocol ခွဲခြမ်းစိတ်ဖြာ
ဒေတာခွဲခြမ်းစိတ်ဖြာမှု၏တိကျမှန်ကန်မှုကိုသေချာစေရန် socket_wsaprotocol_info_import function ကိုအကောင်အထည်ဖော်ရန်လိုအပ်သည်။
ဒေတာဘေ့စဒီဇိုင်း <br> စီးပွားရေးလုပ်ငန်းများနှင့်အညီကျိုးကြောင်းဆီလျော်သောအချက်အလက်များတည်ဆောက်ပုံများအရမလိုအပ်ဘဲနှင့်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန်လိုအပ်သည်။