这是我用来向客户端发送字符串消息的代码。我认为,这个问题与缓冲区有关。
void Client::send_message(std::string message) {
message = message + "\n";
std::ostream sending(&_out_buffer);
sending << message;
boost::asio::async_write(this->_socket, this->_out_buffer,
boost::bind(&Client::send_callback, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
debugger( "--> Message send to " + this->_client_name + " : " + message );
}
问题在于,当我如此快速地发送一系列消息时:
//Send the data to client
client->send_message("connected " + boost::lexical_cast<std::string>(number_of_cells));
//Send the cells
std::set<std::string> cells = it->second->get_names_of_all_non_empty_cells();
std::set<std::string>::iterator cell = cells.begin();
std::set<std::string>::iterator end = cells.end();
for(; cell != end; cell++) {
client->send_message("cell " + *cell + " " + it->second->get_cell_contents(*cell));
}
我会在客户端得到这个:
连接2
连接2
单元格A1测试内容
连接2
单元格A1测试内容
细胞B4抗病毒
当我在发送代码中删除for循环时,它只发送&#34;连接的2&#34;消息一次。所以我认为这与缓冲区未正确清除或加载过快有关。我不确定。有办法处理这种情况吗?只有当我在一段代码中快速发送大量消息时才会发生这种情况。
谢谢!
编辑:
我找到了解决方法,但这并没有解决问题。而不是调用方法&#34; send_message&#34;反复地,我只是将一根大绳子拉到一起并送去。新代码:
//Send the data to client
std::string message = "connected " + boost::lexical_cast<std::string>(number_of_cells) + "\n";
//Send the cells
std::set<std::string> cells = it->second->get_names_of_all_non_empty_cells();
std::set<std::string>::iterator cell = cells.begin();
std::set<std::string>::iterator end = cells.end();
for(; cell != end; cell++) {
message += "cell " + *cell + " " + it->second->get_cell_contents(*cell) +"\n";
}
client->send_message(message);