【问题标题】:PHP socket doesn't sendPHP套接字不发送
【发布时间】:2012-06-06 11:44:25
【问题描述】:

我正在尝试向本地运行的石墨服务器发送一些纯文本数据,以下是相同的代码:

<?php
error_reporting(E_ALL);

$address = '127.0.0.1';
$port = 2003;

$fsock = fsockopen($address,$port);

for($i=1;;$i++){

  $send = "dummy.metric.value ".$i." ".time();
  $sent = fwrite($fsock, $send, strlen($send));
  echo $send ." sent ".$sent."\n";
  sleep(4);
}

?>

没有错误,但石墨服务器不显示新数据。服务器正在运行,我可以通过nctelnet发送数据

【问题讨论】:

  • 它可能被缓冲了,在sleep(4);之前添加对fflush()fflush( $fsock);)的调用。
  • @nickb 照做了,还是一样。
  • 您还需要发送 CRLF 吗?通过 telnet/nc 进行操作时是否按回车键?尝试将."\r\n" 添加到您传递给fwrite() 的数据中
  • @DaveRandom:哇!从没想过这会是个问题。接得好!现在工作..
  • 套接字的级别更低一些。它们需要控制字符来确定您的命令的开始和结束位置。

标签: php sockets graphite


【解决方案1】:

另外不要忘记检查 carbon.conf,因为默认情况下 UDP 监听器是关闭的。

这个选项愚弄了我,因为显然 StatsD 和 Graphite 在同一主机上使用 TCP 进行通信。我用

测试了插入指标
echo "test.foo 20 `date +%s`" | nc 192.168.10.10 2003

但是在阅读了手册页之后,事实证明你必须在 nc 中添加 -u 才能强制它使用 UDP。

希望这可以节省其他人一些时间。

【讨论】:

    【解决方案2】:

    您正在打开一个 TCP 流 - 但 graphite uses UDP

    【讨论】:

    • 在使用 udp 时,会引发连接被拒绝错误。不过问题已经解决了,请看上面的cmets。
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2010-11-05
    • 2019-11-15
    • 2017-09-11
    • 2015-01-22
    • 1970-01-01
    • 2018-02-05
    • 2012-02-16
    相关资源
    最近更新 更多