龙空技术网

「PHP编码」简单理解PHP之socket编程(二)

猿话 462

前言:

而今各位老铁们对“编码php”可能比较注重,你们都需要剖析一些“编码php”的相关内容。那么小编在网上收集了一些有关“编码php””的相关内容,希望朋友们能喜欢,兄弟们一起来学习一下吧!

在上一篇文章《简单理解PHP之socket编程(一)》中,我们已经介绍了如何使用PHP进行Socket编程,列举了Socket服务端和客户端的实现方法。不过,遗憾的是它只实现了单一客户端的连接。

那如何实现单一服务端连接多个客户端呢?

在上一篇文章《简单理解PHP之socket编程(一)》中,我们已经说过,要实现单一服务端连接多个客户端,可以有以下几个方法:

采用非阻塞模式,然后每当有一个客户端连上服务端,就将此客户端连接放进一个数组中,最后,通过遍历数组中的连接来与每个客户端进行交互。

采用阻塞模式,每当有一个客户端连上服务端,服务端就fork一个子进程,让子进程来执行读写操作。

采用select机制,来实现服务端与每个客户端的交互。

利用epoll机制,来实现服务端与每个客户端的交互。

下面我们就着重介绍下第1种方法:采用非阻塞模式,然后每当有一个客户端连上服务端,就将此客户端连接放进一个数组中,最后,通过遍历数组中的连接来与每个客户端进行交互。

先看代码,如下:

服务端:server.php

客户端:client.php

从上面代码来看,这里最关键的地方就是服务端server.php中的socket_set_nonblock()这个函数,它可以将服务端套接字设置为非阻塞模式。这样,socket_accept()函数在接受一个客户端链接后,可以不用阻塞等待下一个连接,而让程序继续执行下一步操作。

虽然,实现服务端连接多个客户端的关键主要在服务端,但在客户端client.php部分,也要注意一下continue处。当客户端输入内容为空时,一定要continue,以避免程序继续向下执行,造成socket_read()函数读取不到内容而阻塞程序。

本文以上内容介绍了非阻塞模式下,单一服务端连接多个客户端的实现方法,在下一篇文章中,我将介绍在阻塞模式下,利用socket_select()的实现方法。如果你想了解更多内容,可以关注本头条号。

标签: #编码php