前面的內容都是跨機器通訊,都是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);
本作品採用《CC 協議》,轉載必須註明作者和本文連結