2

SO中的一个(有点-它与C#没有直接关系)相关问题是:如何在OpenTSDB(时间序列数据库)中插入数据;如那里所述,易于工作的基本shell命令(在linux中)如下:

echo "put mymetric.data_1 1295643636 48 a=foo" | nc -w 15 tsdHost tsdPort

我的问题是有人用 C# 为 OpenTSDB 编写过收集器吗?我面临的问题是,虽然我可以打开一个到 tsd 实例/端口的 Socket 并将以下内容写入它的流,但似乎什么也没发生。

put mymetric.data_1 1295643636 48 a=foo

我正在创建一个基于 InterNetwork、Stream 的 TCP 套接字,并尝试将上述字符串作为 ASCII、UTF-8、-16 和 -32 编码字节发送,但都是徒劳的。

我需要使用哪种类型的 Socket 和哪种类型的编码字节中的任何指针都会有帮助。Java我试图实现的同一件事的代码示例是:

Socket sock = new Socket("tsd.server.com", 4242); 
String point = "put my.metric 1314137008 60 host=someplace.net foo=1\n"; 
sock.getOutputStream().write(point.getBytes()); 
sock.close();
4

1 回答 1

0

我刚刚意识到我发送的字符串末尾没有换行符。在 Java 代码示例中,换行符是显式的。

最后添加一个换行符解决了这个问题。

显式添加换行符的示例代码:

string message = "put mymetric.data_1 1295643636 48 a=foo";
IPAddress ip = IPAddress.Parse("xxx.xxx.xxx.xxx"); // tsdb deamon host ip
IPEndPoint endPoint = new IPEndPoint(ip, 4242); // tsdb deamon port

using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
    s.Connect(endPoint);
    s.Send(new ASCIIEncoding().GetBytes(message + Environment.NewLine));
    s.Close();  
}
于 2012-06-29T13:02:33.320 回答