PHP应用程序 - 与HTTPS服务器的快速连接

时间:2010-10-31 19:54:12

标签: php ssl curl openssl fsockopen

问题是,我想开发一个应用程序(可能是PHP?),能够快速连接到SSL安全服务器并从中发送/获取数据。我的目的是让它发送查询并尽快读取结果。我正在尝试各种解决方案并对它们进行基准测试。我已经尝试过fsockopen()和CURL,但是,想知道是否有任何解决方案我如何才能改进它们?

结果如下: 的fsockopen():

  • 发送的标题:0.26755499839783;
  • 收到的页面:0.48934602737427;

CURL结果:

  • [total_time] => 0.484
  • [pretransfer_time] => 0.281
  • [starttransfer_time] => 0.437

问题是: 1)当查询开始在服务器上执行时,我连接到 - 在发送标题之后或者在我获得页面和连接关闭之后? 2)哪个是CURL的exect时间,我应该比较fsockopen()结果?甚至在将标头发送到服务器之前是starttransfer_time吗?这意味着fsockopen()更快,不是吗? 3)任何解决方案如何调整服务器上的SSL连接,执行代码?可以对PHP的OpenSSL模块进行任何调整(任何可能降级的加密?)以使其更快? 4)没有SSL到SSL安全服务器的任何解决方案? 5)在这种情况下,C ++或其他解决方案会更快吗?

欢迎任何想法:)我被这场“ms”比赛所迷恋:)

谢谢, 纳斯

3 个答案:

答案 0 :(得分:1)

您的问题没有紧密的解决方案。

关于C ++,确实解释了PHP并且C ++被编译+优化,但PHP中的所有加密库都是普通的C,因此编译+优化。

根据服务器硬件,制作更短的服务器密钥可以稍微解决握手阶段。此外,最重要的是,所有依赖TCP的网络协议在处理事务时都会受到网络延迟的影响,这些事务与数据传输(如FTP)的行为不同,因为它们是同步的。

总之...

1.您必须手动关闭连接

4.除非您想自己编写完整的SSL协议,否则最好使用性能最佳的库,openSSL

5.是和否,至少你可能会获得性能提升,但可能并不显着。一般来说,我会推荐它

答案 1 :(得分:0)

对您的方法进行评论,一般情况下,以及对您的问题#2的回复:

当您创建基准(即比较两种或更多种不同技术选项的相对性能)时,您不应该依赖技术本身报告的时序信息。主要原因是很难(除非你去挖掘第三方代码)确切地知道正在报告什么,当然,没有办法在两个值之间进行精确比较不能保证代表相同的测量值。

相反,您应该执行以下操作:

  • 写两个功能相同的代码 - 换句话说,他们做同样的事情,使用相同的算法,对相同的数据进行操作等等 - 唯一的区别是那个使用一种技术(例如fsockopen),而另一种技术使用其他技术(例如CURL)。

  • 现在,将两段代码包装在相同的循环中,这些循环将重复调用代码很多次(例如1000)。您希望每批试验的总执行时间在10秒或更长的范围内。

  • 最后,在两个相同的定时代码中包装每个循环(一个尝试CURL,另一个尝试fsockopen)。只需在开始循环之前捕获时间(以毫秒或微秒),然后运行循环的所有循环,然后再次捕获时间,然后减去。

  • 这将为您提供两种技术实际执行情况的更具代表性的图片。如果需要,可以将最终时间除以循环中的迭代次数,但只要两次测试都运行相同的迭代次数,就不必这样做。

旁注:您可能已经知道这一点,但在php中编写基准代码时,您应该将microtime函数与可选参数一起使用,如下所示:

<?php
  $start = microtime(true);
  /* run benchmark code */
  $elapsed = microtime(true) - $start;
  echo( "elapsed time: {$elapsed} microseconds");

microtime上的可选参数仅在php&gt; 5.0中可用,所以如果你仍然在php 4.x上,那么你必须将两次存储为字符串,然后在事后进行一些解析为了让他们成为数字,你可以用它们做数学。有关详细信息,请参阅php docs for microtime()

答案 2 :(得分:0)

您可以使用fopen() https包装器(带stream_context_create()),但我不知道它是否比其他两个更快。