mysql_connectlocalhost和127.0.0.1的区别(网络层)
connects.php复制代码代码如下所示:
mysql_connect('127.0.0.1 ','root ','zzzizzz1);
mysql_connect('localhost ','root ','zzzizzz1);
使用strace得到系统调用:
复制代码代码如下所示:
strace PHP connects.php 2 > 1 | grep连接
# 127.0.0.1 ->网络插座
连接(3,{ sa_family = af_inet,sin_port = htons(3306),sin_addr = inet_addr(127.0.0.1)},16)= 1 einprogress(正在进行操作)
# localhost -> Unix域套接字
连接(7,{ sa_family = af_file,路径= / / /无功运行mysqld / mysqld。袜子},110)= 0
套接字最初是为网络通信而设计的,但随后在socket的框架,即UNIX域套接字上开发了一个IPC机制。
虽然网络插座也可用于同一主机之间的进程间通信(通过环回地址127.0.0.1),Unix域套接字IPC更有效:
不需要网络协议栈,无需打包和解包、计算校验和、维护序号和应答等,而是将应用程序级数据从一个进程复制到另一个进程。
这是因为IPC机制本质上是一种可靠的通信,而网络协议是为不可靠的通信而设计的。
UNIX域套接字还提供了两个用于流媒体和数据包的API接口,类似于TCP和UDP,但UNIX域消息套接字(UDP)也是可靠的,消息不会丢失或无序。