mysql_connect localhost和127.0.0.1的区别(网络层阐述)_php技巧

connects.php

复制代码 代码如下:

mysql_connect('127.0.0.1','root','zzzizzz1');
mysql_connect('localhost','root','zzzizzz1');

使用strace获取系统调用:

复制代码 代码如下:

strace php connects.php 2>&1 | grep connect

#127.0.0.1 -> internet socket
connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
#localhost -> unix domain socket
connect(7, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0

Socket原本是为网络通讯设计的,但后来在Socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。
虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:
不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。
这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。
UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息(UDP)的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。

时间: 2024-10-26 02:49:09

mysql_connect localhost和127.0.0.1的区别(网络层阐述)_php技巧的相关文章

apache2.2.4+mysql5.0.77+php5.2.8安装精简_php技巧

1.安装Apache 将httpd-2.2.4.tar.gz拷贝至/usr/local/src目录中 tar -zxvf httpd-2.2.4.tar.gz cd httpd-2.2.4 ./configure --prefix=/usr/local/apache2 --enable-so --enable-vhost-alias --enable-rewrite --enable-deflate --enable-mods-shared=all --with-mpm=worker make

PHP 5.0对象模型深度探索之类的静态成员_php技巧

静态属性包含在类中要封装的数据,可以由所有类的实例共享.实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量. 我们在下例中使用了一个静态属性Counter::$count.它属于Counter类,而不属于任何Counter的实例.你不能用this来引用它,但可以用self或其它有效的命名表达.在例子中,getCount方法返回self::$count,而不是Counter::$count. 静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局

PHP 5.0对象模型深度探索之对象复制_php技巧

默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法). 克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象).如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this,如果你用__clone来复制,PHP不会执行任何隐性的复制,下面显示了一个用系列序数来自动化对象的例子: 复制代码 代码如下: class ObjectTracker //对象跟踪

IIS6.0中配置php服务全过程解析_php技巧

虽然 LAMP 组合很不错,但是如果想要架设一台同时支持 PHP.ASP.ASP.NET.JSP.Perl 的 Web 虚拟主机服务器,还是用 Windows 2003 的 IIS 6 最好.网上有很多介绍在 IIS 6 上配置 PHP 的文章,但是那些方法不是性能不好,就是升级麻烦.下面的方法可以让你在第一次配置好后,能够非常方便的进行升级. 这里所说的升级,是指从某个 php4 版本升级到另一个 php4 版本,或者从某个 php5 版本升级到另一个 php5 版本,而不是指从 php4 升

MySQL主机127.0.0.1与localhost区别总结

1. mysql -h 127.0.0.1 的时候,使用TCP/IP连接, mysql server 认为该连接来自于127.0.0.1或者是"localhost.localdomain" 2. mysql -h localhost 的时候,是不使用TCP/IP连接的,而使用Unix socket:此时,mysql server则认为该client是来自"localhost" 3. mysql权限管理中的"localhost"有特定含义: 注意:

MySQL不能通过localhost或127.0.0.1连接数据库

MySQL通过localhost无法连接数据库的解决 问题:一台服务器的PHP程序通过localhost地址无法连接数据库,但是如果设置为127.0.0.1则可以正常连接,连接其他数据库服务器也正常.MySQL的权限设置正确,且通过mysql命令行客户端可以正常连接数据库. 分析:这是典型的socket没有正确设置的情况. 连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock).大部分情况下,可以用localhost代表本机127.

Win7下localhost与127.0.0.1的区别

首先来看一下默认情况下PING localhost 地址是::1,这是一个IPV6 的地址 然后我们再在hosts里面修改localhost的地址为127.0.0.1,这个不用看就知道,ping localhost一定是如下的结果 也就是说,默认Win7以上的系统,包括Win2008都会把localhost解析到::1去. 实践告诉我们,如果在这种情况下在php中使用localhost会比127.0.0.1慢很多.上图 同样是discuz的论坛(未修改hosts文件 ),在连接localhost

linux-Ubuntu下localhost,127.0.0.1和本机IP都不能访问

问题描述 Ubuntu下localhost,127.0.0.1和本机IP都不能访问 全部可以ping通,但是在浏览器,telnet,curl中都不能连接,显示拒绝连接. 解决方案 localhost.127.0.0.1和本机IP区别localhost,127.0.0.1和本机ip三者的区别localhost 127.0.0.1和本机ip三者的区别 解决方案二: 是不是防火墙设置,或者你对应的端口是否开了,ping通只是IP可以访问,但是浏览器等还要看对应端口是否打开 解决方案三: 127.0.0

mysql安装后用netstat -an怎么没有localhost或者127.0.0.1

问题描述 mysql安装后用netstat -an怎么没有localhost或者127.0.0.1 mysql安装后用netstat -an怎么没有localhost或者127.0.0.1,安装的时候改了端口号 补充:我是在虚拟机下面安装的 解决方案 android:failed to connect to localhost/127.0.0.1Error : call to localhost/127.0.0.1:9000 failed on connection exception : ja