stream_socket_client 无法连接(连接超时)

Posted

技术标签:

【中文标题】stream_socket_client 无法连接(连接超时)【英文标题】:stream_socket_client unable to connect (connection timed out) 【发布时间】:2010-12-18 15:47:52 【问题描述】:

我正在使用证书和私钥

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $certfile);
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.xyz.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

它在我的本地 XAMPP 服务器中运行,但在外部服务器中不工作:

警告:stream_socket_client() [function.stream-socket-client]:无法连接到 /home/biranchi/public_html/ 中的 ssl://gateway.sandbox.push.apple.com:2195(连接超时) push.php 在第 42 行

连接110失败

什么是错误?我需要更改服务器中的某些设置吗?

【问题讨论】:

【参考方案1】:

我已通过在生产服务器上打开端口 2195 来解决此问题。您可以通过以下命令进行验证 $telnet gateway.push.apple.com 2195

-bash-3.2# telnet gateway.push.apple.com 2195

Trying 17.149.38.141...
Connected to gateway.push.apple.com (17.149.38.141).
Escape character is '^]'.
Connection closed by foreign host.

【讨论】:

嘿@palaniraja,我在 Mac 上使用 LittleSnitch,并且我已经启用了传入和传出端口 2195。一段时间后它仍然关闭........有什么建议吗? 所以您正在用您的机器测试脚本?作为服务器?可能会尝试禁用 littlesnitch 一段时间。如果你有一个打开的连接而不推送任何数据(空闲),我猜苹果会节流。 我正在从 localhost 进行测试........在小告密者中,我启用了 SILENT MODE > Allow Connection Attempts............但没有运气...... .....如果没有与端口连接,telnet 究竟会显示什么?在我的情况下,它最多显示Escape character is '^]'. 然后在那里停留一段时间......大约一两分钟后,它显示Connection closed by foreign host. 这正常吗? 此端口 2195 是否必须从我的托管服务提供商处打开。我在共享服务器(不是 VPS)上。请帮忙。 @rjBombil 您可以询问您的托管服务提供商。有时他们可能会为域启用。【参考方案2】:

检查您的个人防火墙设置,并确保您没有阻止它。尝试禁用防火墙。

此外,一些 API 喜欢来自实际域而不是桌面的请求。我没有理由相信 Apple 会以这种方式工作,但这也需要检查。

还要确保 ping gateway.sandbox.push.apple.com 并确保连接良好。

【讨论】:

【参考方案3】:

您必须将防火墙设置为允许所有 17.0.0.0/8 块(它都属于 Apple!)。检查THIS ANSWER

并根据Apple:

APNs 服务器使用负载平衡,因此您的设备不会总是连接到相同的公共 IP 地址以接收通知。最好在分配给 Apple 的整个 17.0.0.0/8 地址块上允许访问这些端口。

如果您使用 CSF 防火墙(像我一样),我建议将此行添加到 csf.allow 文件中:

tcp|out|d=2195|d=17.0.0.0/8

然后重新启动 CSF。使用上面的而不是仅使用“17.0.0.0/8”将只允许与 Apple 的外向连接,特别是与端口 2195 的连接。NSA 不会喜欢它,但这更精确和安全! ;)

【讨论】:

以上是关于stream_socket_client 无法连接(连接超时)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel5.5 邮件发送报错:stream_socket_client()

使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed w

关于苹果PUSH推送的问题

predis连接redis sentinel的问题处理

通过 PHP 到 APNS 的持久连接

php和redis之间的高流量连接