PHP 中的 Socket 函数

阅读更多

Socket 就是一种通信机制,类似于银行、电信这些部门的电话客服部门。打电话时,对方会分配一个坐席代表回答你的问题,客服部门就相当于 Socket 的服务器端,你就相当于客户端。在通话结束前,如果有人想找到和你通话的坐席代表是不可能的,因为你们正在通信,客服部门的电话交换机也不会重复分配。

 

Socket 函数的原型定义如下:

 

SOCKET socket( int af, int type, int protocol);

 

Socket 函数的原型定义如下:

 

af:指定应用程序使用的通信协议的协议族,对于 TCP/IP 协议族该参数置 AF_INET,对于 NUIX 可建立本地 Socket 。

 

type:指定创建的 Socket 类型。有三种可选项。

 

流套接字类型(SOCK_STREAM):最常见类型,基于 TCP 协议。

数据报套接字类型(SOCK_DGRAM):即 UDP 数据报。

原始套接字类型(SOCK_RAW):在 IP 层对套接字进行编程,实际上就是在 IP 层够造自己的 IP 包,然后把这个 IP 包发送出去。

 

protocol:指定应用程序所使用的通信协议。最常用的是 TCP 协议与 UDP 协议。

 

同样,可以把从 TCP/UDP 传输层过来的包抓取过来并进行分析。流套接字和数据报套接字不能完成的任务,可以在原始套接字中得以实现。所有语言提供的 Socket API 都是按照这个原型设计的。

 

提示:Socket 从传输模式上又分为端对端和点对点的连接,流套接字和数据报套接字都属于端对端的连接,因此需要绑定端口号。而原始套接字是基于 IP 协议的,属于点对点的传输模式,是没有端口这个概念的。比如常用的监测网络连接 ping 命令,就是基于 ICMP 协议的,它不存在端口概念。

 

PHP 创建 Socket

 

 

PHP 的语言特性和自身定位决定了它只适合做客户端,而不适合做服务器端。因为 Socket  主要面向底层和网络服务开发,一般服务器端都是用 C、Java 等语言实现,这样能更好地操纵底层,对网络服务开发中遇到的问题(如并发、阻塞等)也有完善、成熟的解决方案,而 PHP 显然不适合这种应用场景。

 

实际上,PHP 操作 MySQL 数据库也是通过 Socket  进行的,这正是由于 Socket  屏蔽了底层的协议,使得网络服务之间的互联互通变得简单。

 

你可能感兴趣的:(PHP 中的 Socket 函数)