လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_Accept တွင် socket_accept () တွင်ကွန်ယက်ဖွဲ့စည်းမှုဆိုင်ရာပြ issues နာများ

Socket_Accept တွင် socket_accept () တွင်ကွန်ယက်ဖွဲ့စည်းမှုဆိုင်ရာပြ issues နာများ

M66 2025-05-20

Socket-based server ကို အသုံးပြု. PHP, Socket_accept () ကို အသုံးပြု. () သည် client ကို client ကိုအကောင်အထည်ဖော်ရန်သော့ချက်ဖြစ်သည်။ သို့သော်ဤအစီအစဉ်များကို docker ကွန်တိန်နာတွင်အလုပ်လုပ်သောအခါကွန်ယက်ဖွဲ့စည်းမှု (connection) သည် ကောင်းမွန်သောအလုပ်မလုပ်ခြင်း, ဤဆောင်းပါးသည် PHP ၏ Socke Server သည်ချောချောမွေ့မွေ့လည်ပတ်နိုင်အောင်ကွန်ယက်တစ်ခုတွင်ကွန်ယက်ကိုမည်သို့ပြင်ဆင်ရမည်ကိုအသေးစိတ်ညွှန်ကြားချက်များပေးလိမ့်မည်။

1 ။ ပြ problem နာနောက်ခံ

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 မှဖြစ်သည်။

2 ။ မကြာခဏမေးခွန်းများနှင့်အကြောင်းရင်းများ

1 ။ ကွန်တိန်နာသည်ဆိပ်ကမ်းကိုမဖော်ထုတ်နိုင်ပါ

ကွန်တိန်နာကိုစတင်သည့်အခါဆာဗာမှ server မှနားထောင်သည့် port ကို host သို့ချိတ်ဆက်ထားခြင်းမရှိပါက client သည်သဘာဝကျကျ ဆက်သွယ်. မရပါ။ ဥပမာအားဖြင့်:

 docker run -d php-server

အထက်ပါ command သည် port mapping ကိုမဖော်ပြထားပါ။ PHP server မှ Port 8080 တင်ထားသော port ကိုပြင်ပကမ္ဘာသို့မမြင်နိုင်ပါ။

2 ။ အဆိုပါ binding လိပ်စာမမှန်ကန်ပါ

အကယ်. သင်သည် 127.0.0.1.1 အထိ socket bind လျှင်ကွန်တိန်နာရှိပရိုဂရမ်များသာဤ 0 န်ဆောင်မှုကိုရယူနိုင်သည်။ အိမ်ရှင်သို့မဟုတ်အခြားကွန်တိန်နာကိုဝင်ရောက်ခွင့်ပြုရန်သင် 0.0.0.0 သို့ချည်နှောင်သင့်သည်။

3 ။ Cross- ကွန်တိန်နာကွန်ယက်ကို configured မ

ကွန်တိန်နာမျိုးစုံအကြားဆက်သွယ်ရေးလိုအပ်ပါက၎င်းတို့သည်တူညီသော docker ကွန်ယက်နှင့်ချိတ်ဆက်ရမည်။

3 ။ ဖြေရှင်းနည်း

1 ။ ဆိပ်ကမ်းများမြေပုံ

ကွန်တိန်နာကိုစတင်သည့်အခါကွန်တိန်နာ port ကို host သို့မြေပုံဆွဲရန် -P parameter ကိုသုံးပါ။

 docker run -d -p 8080:8080 php-server

ဤသည်ကွန်တိန်နာ၏ port 8080 ကိုအိမ်ရှင်ရှိဆိပ်ကမ်းသို့မြေပုံဆွဲထုတ်ပြီး client သည် http://m66.netet: 8080/ မှတစ်ဆင့်၎င်းကိုရယူနိုင်သည်။

2 ။ လိပ်စာကိုချည်နှောင်ရန် 0.0.0.0 ကို သုံးပါ

PHP Socket Program ပရိုဂရမ်တွင်လိပ်စာကိုချည်နှောင်ရန် 0.0.0.0 ကို သေချာအောင်လုပ်ပါ။

 socket_bind($socket, '0.0.0.0', 8080);

၎င်းသည်ကွန်တိန်နာ၏အတွင်းပိုင်းလိပ်စာနှင့်အိမ်ရှင်မှမြေပုံထည့်ထားသောဆိပ်ကမ်းများအပါအ 0 င်ရရှိနိုင်သည့်ကွန်ရက်လင့်ခ်များအားလုံးကိုနားထောင်ရန်ခွင့်ပြုသည်။

3 ။ Cross- ကွန်တိန်နာဆက်သွယ်ရေးအတွက်ထုံးစံကွန်ယက်ကို configure

ကွန်တိန်နာမျိုးစုံ (ဥပမာ 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);

4 ။ Docyer Compose ကွန်ယက်ကို set up

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

4 ။ အကြံပြုချက်များ debugging

  • ဆိပ်ကမ်းကိုနားထောင်နေသလားဆိုတာကြည့်ဖို့ NetStat -tlnp (သို့ ) Tslnp ကို သုံးပါ။

  • Port Connection ကိုစမ်းသပ်ရန် Telnet M66.net 8080 သို့မဟုတ် NC -ZV M66.NET 8080 ကို သုံးပါ။

  • Socket Creation နှင့် Binding သည်မမှန်ကန်ကြောင်းစစ်ဆေးရန် Docker မှတ်တမ်းများနှင့် PHP အမှားမှတ်တမ်းများကိုစစ်ဆေးပါ။

5 ။ အကျဉ်းချုပ်

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 များကိုတည်ဆောက်နိုင်သည်။