【问题标题】:fsockopen does not always perform the mysql queries when page is refreshed刷新页面时,fsockopen 并不总是执行 mysql 查询
【发布时间】:2012-01-29 06:56:43
【问题描述】:

服务器 A 使用 fsockopen、fwrite 和 fgets 从远程服务器 B 收集信息。远程服务器 B 创建 mysql 查询并提供此信息。当服务器 A 首次加载时,所有信息(来自远程服务器 B)出现在服务器 A 上——这意味着连接工作正常。 但是,有时当页面刷新时(在服务器 A 上),没有显示远程服务器 B 的信息。这是为什么呢?

服务器 A 上的代码很简单:

function test_http_request($path, $host, $test_request, $port=80){
    $test_request_proc= test_encode($test_request);
    //http request  
    $http_request  = "POST $path HTTP/1.0\r\n";
    $http_request .= "Host: $host\r\n";
    $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
    $http_request .= "Content-Length: " . strlen($test_request_proc) . "\r\n";
    $http_request .= "User-Agent: testConnection/PHP\r\n";
    $http_request .= "\r\n";
    $http_request .= $test_request_proc;
    /////output
    $test_resource = '';
    //open socket
    if(false == ($test_connect =@fsockopen('[remote server Bs IP ]', $port, $errno, $errstr, 10))){die('could not open test connection');}
    //send http_request 
    fwrite($test_connect, $http_request);
    //get response 
    while(!feof($test_connect))$test_resource .= fgets($test_connect, 1160);
    //close socket 
    fclose($test_connect);

    $test_resource = explode("\r\n\r\n", $test_resource, 2);
    return $test_resource;
}

根据远程服务器 B 的错误日志,未执行 mysql 查询(执行以向服务器 A 提供信息)(资源是布尔值)。有时它们被执行,有时它们不被执行。问题不在于查询语言,因为当在远程服务器 B 上请求和执行查询时,它可以正常工作。只有当服务器 A 通过 fsockopen() 请求信息时,问题才会出现。 注意:问题仅在于远程服务器B执行的mysql查询,任何预先输出的文本每次都会出现。 感谢您的宝贵时间

【问题讨论】:

  • 我认为您需要发布一些 srv A 和 B 的示例。

标签: php mysql fsockopen


【解决方案1】:

如果您有两个套接字像您一样相互通信 - 使用“while(true)” - 并且您重新启动其中一个,另一个套接字仍在尝试与第一个实例通信。您需要寻找一些迹象表明(重新启动的)服务器已断开连接并重新打开连接。本质上,对话的一方挂断了,但另一方仍在听……什么都没有。

【讨论】:

  • 这听起来不错。不过,我还是新手。你会建议我怎么做?
  • 我不熟悉“fsockopen”、“fgets”等,但我敢打赌有一些信号表明对话的一方已经结束。此外 - (只是偷看) - 'fgets' 函数使用第二个参数作为长度。在获得所有值之前,您一直处于阻塞状态。尝试较小的值(或 1)并自己构建响应。这会让你知道连接是否关闭。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2023-03-20
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2022-11-13
  • 1970-01-01
相关资源
最近更新 更多