PHP+Socket系列之实现客户端与服务端数据传输
本篇文章给大家带来了关于php+socket的相关知识,其中主要介绍了什么是socket?php+socket如何实现客户端与服务端数据传输?感兴趣的朋友下面一起来看一下,希望对大家有帮助。
socket介绍
实现网络进程之间的通信,几乎所有应用程序都是采用 socket,socket 是应用层与 TCP/IP 协议族通信的中间抽象层,它是一组接口。在设计模式中,socket 其实是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 socket 接口后面,对用户来说,一组简单的接口就是全部,让 socket 去组织数据,以符合指定的协议
socket 的英文原意是 「孔」或「插座」,通常也被称作「套接字」,用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
socket 链接的三个过程
-
服务端监听:IP+端口号
-
客户端请求:发出向服务端的 IP 以及端口的连接请求
-
链接确认:服务端套接字监听到或者说接收到客户端套接字连接请求,他就会建立一个新的进程,把服务端的套接字描述发给客户端,以响应客户端的请求,一旦客户端确认了此描述,连接就建立好了。儿服务端的套接字继续处于监听状态,继续接受其他客户端套接字的连接请求。
php实现socket
如果需要在 php 中使用 socket,则需要在编译 php 是添加 --enable-sockets
配置项来启用,可使用 php -m|grep sockets
命令检查启用情况,具体编译过程可参考 这篇文章
快速体验
服务端与客户端简略代码如下,运行后服务端会阻塞等待客户端连接,客户端会在控制台要求输入内容,输入后信息会在服务端打印,同时客户端显示转为大写的内容,此示例服务端与客户端运行在一台服务器:
服务端监听
<?php // 创建套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 设置 ip 被释放后立即可使用 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, true); // 绑定ip与端口 socket_bind($socket, 0, 8888); // 开始监听 socket_listen($socket); while (true) { // 接收内容 $conn_sock = socket_accept($socket); socket_getpeername($conn_sock, $ip, $port); // echo '请求ip: ' . $ip . PHP_EOL . '端口: ' . $port; while (true) { // 获取消息内容 $msg = socket_read($conn_sock, 10240); // TODO 处理业务逻辑 // 将信息转为大写并原样返回客户端 socket_write($conn_sock, strtoupper($msg)); echo $msg; } }
登录后复制