用于将数据写入OpenTSDB的C#代码

时间:2012-06-27 21:31:03

标签: c# sockets opentsdb

在SO中的一个(有点 - 与C#不直接相关)相关问题是:How to insert data in OpenTSDB (Time Series Database);如上所述,基本的shell命令很容易(在linux中)如下:

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

我的问题是,是否有人在C#中为OpenTSDB编写了一个收藏家?我面临的问题是,虽然我可以打开一个Socket到tsd实例/端口,然后我将以下内容写入其流,但似乎没有任何事情发生。

put mymetric.data_1 1295643636 48 a=foo

我正在创建一个InterNetwork,基于流的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();

1 个答案:

答案 0 :(得分: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();  
}