connects.php
コードをコピーします コードは次のとおりです:
mysql_connect('127.0.0.1','root','zzzzz1');
mysql_connect('localhost','root','zzzizzz1');
strace を使用してシステムコールを取得します:
コードをコピーします コードは次のとおりです:
strace php connect.php 2>&1 | grep connect
#127.0.0.1 -> インターネットソケット
connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (操作が進行中)
#localhost -> UNIX ドメインソケット
connect(7, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0
ソケットはもともとネットワーク通信用に設計されましたが、後にUNIXドメインソケットであるソケットフレームワークに基づいてIPCメカニズムが開発されました。
ネットワーク ソケットは同じホスト上のプロセス間通信 (ループバック アドレス 127.0.0.1 経由) にも使用できますが、IPC では UNIX ドメイン ソケットの方が効率的です。
ネットワーク プロトコル スタックを通過したり、パッケージ化とアンパックを行ったり、チェックサムを計算したり、シーケンス番号や応答を維持したりする必要はありません。アプリケーション層のデータをあるプロセスから別のプロセスにコピーするだけです。
これは、ネットワーク プロトコルが信頼性の低い通信向けに設計されているのに対し、IPC メカニズムは本質的に信頼性の高い通信であるためです。
UNIX ドメイン ソケットには、TCP や UDP と同様に、ストリーム指向とパケット指向の 2 つの API インターフェイスも用意されていますが、メッセージ指向 (UDP) UNIX ドメイン ソケットも信頼性が高く、メッセージが失われたり順序が崩れたりすることはありません。