php的socket编程和java的socket编程区别还是蛮大的,默认情况下php的socket不能像java socket开启多线程来同时接收多个客户端的连接。
使用 telnet 命令同时打开多个客户端测试,你会发现服务器一个时间只处理一个客户端,其他需要在后面“排队”;只有当前的客户端端口才会处理下一个连接
这就是阻塞 IO 的特点,这种模式的弱点很明显,效率极低
网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
同步、异步和阻塞、非阻塞是组合关系,因此有4种方式:
同步阻塞、同步非阻塞、异步阻塞、异步非阻塞
linux有五种I/O模型
1)阻塞I/O(blocking I/O)
2)非阻塞I/O (nonblocking I/O)
3)I/O复用(select 和poll) (I/O multiplexing)
4)信号驱动I/O (signal driven I/O (SIGIO))
5)异步I/O (asynchronous I/O (the POSIX aio_functions))
前四种都是同步,只有最后一种才是异步IO
详细了解: 浅谈socket同步和异步、阻塞和非阻塞、I/O模型_php技巧
使用 telnet 命令同时打开多个客户端测试,你会发现服务器一个时间只处理一个客户端,其他需要在后面“排队”;只有当前的客户端端口才会处理下一个连接
这就是阻塞 IO 的特点,这种模式的弱点很明显,效率极低
网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式
同步、异步和阻塞、非阻塞是组合关系,因此有4种方式:
同步阻塞、同步非阻塞、异步阻塞、异步非阻塞
linux有五种I/O模型
1)阻塞I/O(blocking I/O)
2)非阻塞I/O (nonblocking I/O)
3)I/O复用(select 和poll) (I/O multiplexing)
4)信号驱动I/O (signal driven I/O (SIGIO))
5)异步I/O (asynchronous I/O (the POSIX aio_functions))
前四种都是同步,只有最后一种才是异步IO
详细了解: 浅谈socket同步和异步、阻塞和非阻塞、I/O模型_php技巧
以下是php cli模式下阻塞I/O方式的socekt server/client 示例代码
server.php
<?php
/**
* socket_server.php.
* User: lvfk
* Date: 2017/11/20 0020
* Time: 17:28
* Desc: php socket server
*/
/*
+-------------------------------
* @socket通