c++ - Aerospike 没有回应

标签 c++ aerospike

我正在用 C++ 编写自己的 Aerospike 客户端,我遇到了一个问题:虽然我的请求似乎到达了服务器(如果你发送废话,连接将被丢弃),但服务器没有返回任何响应。

这是我的代码:

#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <iostream>

void read_message(boost::asio::ip::tcp::socket& socket)
{
    for (;;)
    {
      boost::array<char, 1> buf;
      boost::system::error_code error;
      size_t len = socket.read_some(boost::asio::buffer(buf), error);
      if (error == boost::asio::error::eof)
        break;
      else if (error)
        throw boost::system::system_error(error);
      std::cout.write(buf.data(), len);
      std::cout << std::endl;
    }
}

void send_message(boost::asio::ip::tcp::socket& socket, std::string message)
{
    boost::array<char, 1024> buf;
    std::copy(message.begin(), message.end(), buf.begin());
    boost::system::error_code error;
    socket.write_some(boost::asio::buffer(buf, message.size()), error);
}

int main()
{
    std::cout << "Connecting to socket.." << std::endl;
    boost::asio::io_service ios;
    boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 3000);
    boost::asio::ip::tcp::socket socket(ios);
    socket.connect(endpoint);
    std::cout << "Connected to socket. Writing message." << std::endl;
    send_message(socket, "\x02\x01\x00\x00\x00\x00\x006build\nedition\nnode\nservice\nservices\nstatistics\nversion");
    std::cout << "Writed message. Reading response." << std::endl;
    read_message(socket);
    std::cout << "Read response. Exiting prigram." << std::endl;
    socket.close();
    return 0;
}

例如,此代码适用于 1.1.1.1:80 - 返回带有“错误请求”字样的 HTML。

最佳答案

您在 send_message() 函数中只调用了一次 socket.write_some()。您基本上假设所有字节都将在一次调用中发送。没有这样的保证。当我尝试你的代码时,它在我的运行中只发送了 2 个字节。除非所有字节都到达服务器,否则它不会响应(显然)。

关于c++ - Aerospike 没有回应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62039912/

相关文章:

c++ - 从接收方的角度来看,我如何确保已收到使用 MPI_Isend 发送的所有消息?

c++ - stringstream(或 boost)是否有一些智能格式功能?

当到达字符串末尾时,C++ getline 导致段错误

c++ - 插入 int 集合时崩溃

asp.net-core - Autofac 依赖解析异常

database - 限制 aerospike 选择查询中的记录数

c# - 通过 ref/out 从 C# 到 C++ 的 Swig 传递 Std::vector

c++ - 在堆上声明对象然后通过引用传递它?

truncate - 是否可以使用 'truncate' 在 Aerospike 中使用 asinfo 发出持久删除?

java - Aerospike 的单元测试