PHP - 有人可以为我解释 pfsockopen 函数吗? (持久套接字)

标签 php sockets

来自 PHP.net:

http://www.php.net/manual/en/function.pfsockopen.php

我明白这个函数完成的要点,但我仍然不清楚这是否会完成我想要的。这是我的场景:

我有一个由许多用户同时使用的大型 PHP 应用程序。在应用程序中,我正在打开一个到远程服务器的 TCP 套接字以记录消息等...我希望我可以利用 pfsockopen 来减少需要打开的连接。例如,用户 1 登录 - 套接字打开。 User2登录后,没有打开socket,因为他可以“搭便车”到user1打开的socket上。

这可能吗?

最佳答案

pfsockopen 确实会在脚本结束时保持套接字打开,允许它从一个请求到另一个请求重新使用,有效地打开更少的连接,就像你期望的那样。但是,这并不与所有 SAPI 兼容。

持久性发生在每个进程的基础上。因此,在 CLI SAPI 中运行的 pfsockopen 将在每次执行时关闭并重新打开套接字,因为 CLI 脚本是在启动、打开套接字和结束(关闭套接字)的单个进程中执行的以及过程)。

在每个脚本一个进程的 CGI 模式下,也是如此。

对于 Apache SAPI,这取决于所使用的多处理模块 (MPM) 类型。 mpm-prefork 在每次请求时生成一个新进程,因此它很可能不支持它。 mpm-worker 然而,生成线程,所以它可能会在那里工作。 mpm-winnt 是多线程 MPM 的 Windows 变体,因此它也应该可以工作。

可能发生的最坏情况是调用将作为正常的 fsockopen 调用执行。

关于PHP - 有人可以为我解释 pfsockopen 函数吗? (持久套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099248/

相关文章:

javascript - 从选择框中获取所有选项 NOT MULTIPLE 并将它们传递给 php 以插入 mysql

java - 查找没有子网的 LAN 网络的 IP 和 Mac 地址

android - 我的广播接收器未在多线程应用程序中注册

javascript - 如果 Essential Grid Wordpress 插件中的价格等于 0,则无法隐藏价格

javascript - 将 Pdf 文件上传到数据库

php - AJAX 更新数据库,但不替换 <div>

c# - 使用 Socket 从机器接收数据

sockets - Clozure Common Lisp 中的 make-socket 错误

c++ linux accept()在套接字关闭后阻塞

php - 与 Apache/PHP/Javascript 的长期连接(异步服务器推送)?