Menu Close

php中简单实现socket

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。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注