stream_socket_client无法连接(连接超时)

我正在使用证书和私钥

$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/push.php中的ssl://gateway.sandbox.push.apple.com:2195(连接超时)在线42

无法连接110

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

我已经通过在生产服务器上打开端口2195解决了这个问题。 您可以通过以下命令validation$ 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. 

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

此外,一些API像请求来自实际的域而不是桌面。 我没有理由相信苹果公司以这种方式工作,但这也是要检查的东西。

还要确保和ping gateway.sandbox.push.apple.com并确保你有一个很好的连接。

你必须设置你的防火墙,以允许所有的17.0.0.0/8块(这一切都属于苹果!)。 检查这个答案

而根据苹果 :

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

如果你正在使用CSF防火墙(像我一样),我build议将这一行添加到csf.allow文件中:

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

使用这个而不仅仅是“17.0.0.0/8”将只允许与苹果的连接,特别是2195端口。国家安全局不会喜欢它,但这是更精确和安全! ;)