Socket-based server ကို အသုံးပြု. PHP, Socket_accept () ကို အသုံးပြု. () သည် client ကို client ကိုအကောင်အထည်ဖော်ရန်သော့ချက်ဖြစ်သည်။ သို့သော်ဤအစီအစဉ်များကို docker ကွန်တိန်နာတွင်အလုပ်လုပ်သောအခါကွန်ယက်ဖွဲ့စည်းမှု (connection) သည် ကောင်းမွန်သောအလုပ်မလုပ်ခြင်း, ဤဆောင်းပါးသည် PHP ၏ Socke Server သည်ချောချောမွေ့မွေ့လည်ပတ်နိုင်အောင်ကွန်ယက်တစ်ခုတွင်ကွန်ယက်ကိုမည်သို့ပြင်ဆင်ရမည်ကိုအသေးစိတ်ညွှန်ကြားချက်များပေးလိမ့်မည်။
PHP ရှိ Socket 0 န်ဆောင်မှုများကိုယေဘုယျအားဖြင့်အောက်ပါအဆင့်များမှတဆင့်အကောင်အထည်ဖော်သည်။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);
$client = socket_accept($socket);
အခြေခံအားဖြင့်အထက်ဖော်ပြပါကုဒ်များကိုဒေသခံဖွံ့ဖြိုးရေးပတ် 0 န်းကျင်တွင်အ ဘယ်သူ မျှမပြ problem နာမရှိပါ။ ပြ problems နာအများစုသည် Docyer ၏ Network Configuration မှဖြစ်သည်။
ကွန်တိန်နာကိုစတင်သည့်အခါဆာဗာမှ server မှနားထောင်သည့် port ကို host သို့ချိတ်ဆက်ထားခြင်းမရှိပါက client သည်သဘာဝကျကျ ဆက်သွယ်. မရပါ။ ဥပမာအားဖြင့်:
docker run -d php-server
အထက်ပါ command သည် port mapping ကိုမဖော်ပြထားပါ။ PHP server မှ Port 8080 တင်ထားသော port ကိုပြင်ပကမ္ဘာသို့မမြင်နိုင်ပါ။
အကယ်. သင်သည် 127.0.0.1.1 အထိ socket bind လျှင်ကွန်တိန်နာရှိပရိုဂရမ်များသာဤ 0 န်ဆောင်မှုကိုရယူနိုင်သည်။ အိမ်ရှင်သို့မဟုတ်အခြားကွန်တိန်နာကိုဝင်ရောက်ခွင့်ပြုရန်သင် 0.0.0.0 သို့ချည်နှောင်သင့်သည်။
ကွန်တိန်နာမျိုးစုံအကြားဆက်သွယ်ရေးလိုအပ်ပါက၎င်းတို့သည်တူညီသော docker ကွန်ယက်နှင့်ချိတ်ဆက်ရမည်။
ကွန်တိန်နာကိုစတင်သည့်အခါကွန်တိန်နာ port ကို host သို့မြေပုံဆွဲရန် -P parameter ကိုသုံးပါ။
docker run -d -p 8080:8080 php-server
ဤသည်ကွန်တိန်နာ၏ port 8080 ကိုအိမ်ရှင်ရှိဆိပ်ကမ်းသို့မြေပုံဆွဲထုတ်ပြီး client သည် http://m66.netet: 8080/ မှတစ်ဆင့်၎င်းကိုရယူနိုင်သည်။
PHP Socket Program ပရိုဂရမ်တွင်လိပ်စာကိုချည်နှောင်ရန် 0.0.0.0 ကို သေချာအောင်လုပ်ပါ။
socket_bind($socket, '0.0.0.0', 8080);
၎င်းသည်ကွန်တိန်နာ၏အတွင်းပိုင်းလိပ်စာနှင့်အိမ်ရှင်မှမြေပုံထည့်ထားသောဆိပ်ကမ်းများအပါအ 0 င်ရရှိနိုင်သည့်ကွန်ရက်လင့်ခ်များအားလုံးကိုနားထောင်ရန်ခွင့်ပြုသည်။
ကွန်တိန်နာမျိုးစုံ (ဥပမာ Php Socket Casher နှင့် client လုပ်သူတစ် ဦး အဖြစ်) ဆက်သွယ်ရန်လိုအပ်ပါက Custom Network တစ်ခုဖန်တီးရန်အကြံပြုသည်။
docker network create my-network
ထို့နောက်ကွန်တိန်နာကိုစတင်ရန်ကွန်ယက်ကိုသုံးပါ။
docker run -d --name php-server --network my-network php-server
docker run -it --network my-network php-client
ဤအချိန်တွင် PHP-client သည် container name php-server မှတဆင့် 0 န်ဆောင်မှုကိုတိုက်ရိုက်ဆက်သွယ်နိုင်သည်။
socket_connect($client, 'php-server', 8080);
Docker ကိုအသုံးပြုသောအခါ, Docker Compose.ml ရှိကွန်ယက်ကိုအတိအလင်းဖော်ပြနိုင်သည်။
version: '3'
services:
php-server:
build: .
ports:
- "8080:8080"
networks:
- app-net
php-client:
build: ./client
networks:
- app-net
networks:
app-net:
driver: bridge
0 န်ဆောင်မှုခံယူသူသည် Php-server မှတဆင့် 0 န်ဆောင်မှုကို 0 င်ရောက်နိုင်ဆဲဖြစ်သည်။ 8080 ။
ဆိပ်ကမ်းကိုနားထောင်နေသလားဆိုတာကြည့်ဖို့ NetStat -tlnp (သို့ ) Tslnp ကို သုံးပါ။
Port Connection ကိုစမ်းသပ်ရန် Telnet M66.net 8080 သို့မဟုတ် NC -ZV M66.NET 8080 ကို သုံးပါ။
Socket Creation နှင့် Binding သည်မမှန်ကန်ကြောင်းစစ်ဆေးရန် Docker မှတ်တမ်းများနှင့် PHP အမှားမှတ်တမ်းများကိုစစ်ဆေးပါ။
Socket_Accept () ကို docker ကွန်တိန်နာများတွင်အသုံးပြုသောအခါအဓိကပြ problem နာသည် function ကိုယ်နှိုက်မဟုတ်ဘဲမတော်မတော်ကွန်ယက်ဖွဲ့စည်းမှုအတွက်အကြောင်းပြချက်ဖြစ်သည်။ နားထောင်ခြင်းလိပ်စာသည် 0.0.0.0 ဖြစ်သည်ကိုသေချာစေရန်ကွန်တိန်နာဆိပ်ကမ်းကိုမှန်ကန်စွာမြေပုံဆွဲထားပြီးကွန်တိန်နာအကြားကွန်ယက်ချိတ်ဆက်မှုသည်တည်ငြိမ်သော socket 0 န်ဆောင်မှုများကိုရယူရန်သော့ချက်ဖြစ်သည်။ docker ကွန်ယက်စနစ်နှင့် docker compose service specrocy ယန္တရားကိုပေါင်းစပ်ပြီး Discovery Discovery ယန္တရားကိုပေါင်းစပ်ပြီးဖြန့်ကျက်မှုစွမ်းရည်ကိုတိုးတက်စေနိုင်သည်။
ကျိုးကြောင်းဆီလျော်သော configuration နှင့်အတူ, သင်သည် inter-system ဆက်သွယ်ရေးအတွက်အစွမ်းထက်သောပံ့ပိုးမှုပေးသော decocker ကွန်တိန်နာများတွင်တည်ငြိမ်။ ထိရောက်သော PPP socket services များကိုတည်ဆောက်နိုင်သည်။