共计 948 个字符,预计需要花费 3 分钟才能阅读完成。
1. 什么是 socket
socket 通常称为“套接字”,用于描述 ip 地址和端口,是一个通信链的句柄,它既不是一个程序,也不是一种协议,只是操作系统提供的通信层的一组抽象 API。
2. 如何创建 socket 服务端
<?php
#本地 ip
$host = '0.0.0.0';
#端口
$port = '9923';
set_time_limit(0);
#创建 socket
$socket = socket_create(AF_INET,SOCK_STREAM,0) or die('创建失败');
#绑定 socket 的句柄
$result = socket_bind($socket,$host,$port) or die('绑定失败');
#开始监听
$result = socket_listen($socket,3) or dir('监听失败');
do{
#接受连接并调用另一个 socket 处理客户端
$spawn = socket_accept($socket) or die ('接受信息失败');
#读取客户端输入
$input = socket_read($spawn,1024) or die ('读取客户端信息失败');
$input = trim($input);
#翻转字符串,做为输出信息
$output = strrev($input);
echo " 接受到客户端消息 " . PHP_EOL;
#想客户端发送消息
socket_write($spawn,$output . PHP_EOL,strlen($output)) or die('发送消息失败');
socket_close($spawn);
}while(true);
socket_close($socket);
3. 使用客户端连接
# 打开终端,输入以下命令
telnet 127.0.0.1 9923
#然后输入 hello
hello
#结果返回 hello 的翻转字符串
olleh
4. 小结
PHP 的语言特性和自身定位决定它只适合做客户端,而不适合做服务端。
因为 socket 主要面向底层和网络服务开发,一般都会使用 C、JAVA 等语言,这样能更好的操作底层,对网络服务开发遇到的问题如(并发、阻塞)也有完善的解决方案,。
5. 延伸
除了传统的 socket,随着 HTML5 的流行,websocket 也逐渐兴起,有兴趣可以看一下 swoole 实现的 websocket。
正文完