2012-06-06 3 views
1

Je suis en train d'envoyer des données en texte clair sur un serveur de graphite qui fonctionne sur mon local, voici le code pour le même:socket PHP n'envoie pas

<?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); 
} 

?> 

Il n'y a pas d'erreur, mais le serveur de graphite doesn ne montre pas les nouvelles données. Le serveur est en cours d'exécution et je peux envoyer des données à travers nc et telnet

+0

Il est probablement tamponné, ajoutez un appel à ['fflush()'] (http://us.php.net/manual/fr/function.fflush.php) ('fflush ($ fsock);') avant 'dormir (4); ' – nickb

+0

@nickb l'a fait, toujours pareil. – karthik

+1

Devez-vous également envoyer un CRLF? Êtes-vous en appuyant sur retour lorsque vous le faites via telnet/nc? Essayez d'ajouter '." \ R \ n "' aux données que vous passez à 'fwrite()' – DaveRandom

Répondre

0

Vous ouvrez un flux TCP - mais graphite uses UDP?

+0

sur l'utilisation d'udp, il jette la connexion a refusé les erreurs. Mais la question a été résolue, s'il vous plaît lire les commentaires ci-dessus. – karthik

2

N'oubliez pas non plus de vérifier le fichier carbon.conf, car le programme d'écoute UDP est désactivé par défaut.

Cette option m'a dupé, car apparemment StatsD et Graphite communiquent en utilisant TCP sur le même hôte. Je l'ai testé avec l'insertion métrique

echo "test.foo 20 `date +%s`" | nc 192.168.10.10 2003 

Mais après avoir lu les pages de manuel, il s'avère que vous devez ajouter à -u nc pour le forcer en utilisant UDP.

Espérons que cela fera gagner du temps aux autres.