Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 暂时停止客户端连接到套接字_Php_Sockets - Fatal编程技术网

Php 暂时停止客户端连接到套接字

Php 暂时停止客户端连接到套接字,php,sockets,Php,Sockets,我需要做一个脚本,是服务器和客户端在同一时间 这需要交替进行,从倾听到尝试连接 当任何客户端进入客户端模式并尝试连接时,是否有方法临时阻止其连接 据我所知,只有一种永久的方法可以阻止这种情况,那就是重新开始倾听,我正在努力避免这种情况 这个想法是,它将在多个服务器上运行,并且必须连接到自身 每次建立连接时,一旦交换了需要交换的内容,各方就会从(客户机/目的地)列表中删除另一方 因此,我需要一种方法在侦听器尝试连接时阻止它,因为在极少数情况下,两个侦听器会在完全相同的时间尝试彼此连接,并等待被拾取

我需要做一个脚本,是服务器和客户端在同一时间

这需要交替进行,从倾听到尝试连接

当任何客户端进入客户端模式并尝试连接时,是否有方法临时阻止其连接

据我所知,只有一种永久的方法可以阻止这种情况,那就是重新开始倾听,我正在努力避免这种情况

这个想法是,它将在多个服务器上运行,并且必须连接到自身

每次建立连接时,一旦交换了需要交换的内容,各方就会从(客户机/目的地)列表中删除另一方

因此,我需要一种方法在侦听器尝试连接时阻止它,因为在极少数情况下,两个侦听器会在完全相同的时间尝试彼此连接,并等待被拾取,但这种情况不会发生。

您可以:

  • 关闭()侦听套接字(可能在需要时重新打开)
  • 如果listen套接字变得可读,则暂时不要调用accept()(您可以在几秒钟内不使用它,但它确实使用了操作系统资源)
  • 调用accept(),但立即关闭()生成的套接字。(这相当粗鲁…)

以上三个选项来自systemcall/OS级别。我不知道PHP是如何实现(或包装)它们的。

投票决定迁移到dba.stackexchange。com@njk为什么?这个问题与数据库或管理无关。@EJP在我看来,在连接发生时阻止套接字应该在会话层,而不是在应用程序层。它仍然与数据库无关。与数据库无关。。。我的两分钱;重新阅读你的问题后,我认为唯一可能的选择是接受()+查找(ip)+关闭()。客户端IP地址只有在连接请求被接受后才可用。lookup()应该检查由程序的主动和被动部分维护的(非)所需连接的(哈希)表。(这个表可以被看作是一个“工作列表”)顺便说一句:我曾经用这个机制在服务器上实现了一个IP ban功能:如果IP在ban列表中,只需关闭套接字。不,只是在没有线程的普通C中(对于几百个非阻塞连接、低带宽和每条消息相对较小的CPU成本,你不需要线程)。不过,我也不知道PHP是如何包装socket()/listen()/accept()/select()原语的,但我确信它一定有这些原语。