socket_create 与 fsockopen php

Posted

技术标签:

【中文标题】socket_create 与 fsockopen php【英文标题】:socket_create vs. fsockopen php 【发布时间】:2010-10-08 11:14:48 【问题描述】:

我目前使用的托管服务不允许我使用套接字,这可能是因为他们有充分的理由。但是,他们确实让我使用 fsockopen。我想知道有什么区别,因为一些与 socket_create 甚至 stream_socket_server 一起使用的脚本不能与 fsockopen 一起使用。也就是说,如果 fsockopen 应该工作,我的代码在下面列出。它的作用是在自己的 IP 地址上侦听传入的 udp 数据包并读取它们。

谢谢

$sock = fsockopen("udp://x.x.x.x", $port);
while(1)

    $buf = fread($sock, 200);
    flush();
    ob_flush();

【问题讨论】:

【参考方案1】:

fsockopen 创建到主机的连接,而不是侦听套接字。

fsockopen($address) ~== socket_connect(socket_create(), $address)

您的托管服务提供商不希望您监听备用端口/协议。

如果你有什么工作,我不会指望它总是工作,因为它会是一个错误。

【讨论】:

感谢“fsockopen == socket_connect(socket_create(), $address)”正是我想要的。看来我需要找一个新主机:P 我在哪里可以获得更详细的信息为您解答。 80端口上没有程序监听吗?监听 80 的程序不是监听套接字吗? @JayapalChandran Samuel 想做的是编写监听端口 80 的程序,而不是连接到它。他想接受连接(简化,因为 UDP 是无状态的)。如果您想了解更多信息,这可能是一个好的开始:en.wikipedia.org/wiki/Network_socket 根据我自己的经验,fsockopen 比 socket_connection 慢得多。 fsockopen(只是函数)花了 2 秒时间连接到本地服务器,而 socket_create 在几毫秒内完成了相同的操作:) 感谢您的回答!!

以上是关于socket_create 与 fsockopen php的主要内容,如果未能解决你的问题,请参考以下文章

PHP的fsockopen方式访问接口慢的原因与优化方案

记一次socket_create()函数耗时异常记录

无法在 PHP 中与 fsockopen 连接(连接超时)

PHP ZKLib 未定义函数 socket_create()

PHP fsockopen受服务器KeepAlive影响的解决

phpwebsocket - 未定义函数 socket_create() - 在 Windows/WAMP 上启用 php_sockets