玩轉 PHP 網路程式設計全套之 unix 本地域 socket 通訊

勺顛顛發表於2020-04-25

前面的內容都是跨機器通訊,都是AF_INET域socket通訊,這型別的通訊都要經過協議層層封裝再經過網路卡傳輸出去的。
而AF_UNIX域socket通訊一般用於程式間IPC通訊。
它的通訊與程式間PIPE,MQ非常類似。傳輸效率是非常高的,不需要經過協議層層封裝,一般用於非血緣關係程式通訊。

程式1或叫服務端也行

fprintf(STDIN,"process pid:%d\n",posix_getpid()); $sockfd = socket_create(AF_UNIX,SOCK_STREAM,0); socket_set_option($sockfd,SOL_SOCKET,SO_REUSEPORT,1); socket_bind($sockfd,"./unix_socket"); socket_listen($sockfd,5); chmod("./unix_socket",0777);  while (1){      $connfd = socket_accept($sockfd);     $message = "php is the best language in the world!";     socket_write($connfd,$message,strlen($message));     while (1){         $data = socket_read($connfd,8192);         fprintf(STDIN,"recvfrom client:%s",$data);         socket_write($connfd,$data,strlen($data));     }   } socket_close($connfd);

程式2或叫客戶端

fprintf(STDIN,"process pid:%d\n",posix_getpid()); $sockfd = socket_create(AF_UNIX,SOCK_STREAM,0); socket_connect($sockfd,"./unix_socket"); chmod("./unix_socket",0777); while (1){     if(($recv = socket_read($sockfd,4098))){         echo $recv;     }     $data = fread(STDIN,2014);     if ($data){         socket_write($sockfd,$data,strlen($data));     } }  socket_close($sockfd);

玩轉 PHP 網路程式設計全套之unix本地域socket通訊

本作品採用《CC 協議》,轉載必須註明作者和本文連結

只會php crud的渣渣

相關文章