C++ 从套接字中提取数据?
我目前正在以以下方式从套接字中提取数据C++ 从套接字中提取数据?,c++,visual-studio-2010,sockets,boost-asio,C++,Visual Studio 2010,Sockets,Boost Asio,我目前正在以以下方式从套接字中提取数据 boost::asio::read_until( *socket, buffer, "\n", error ); std::string s( (std::istreambuf_iterator<char>(&buffer)), std::istreambuf_iterator<char>()); boost::asio::读取直到(*套接字,缓冲区,“\n”,错误); s
boost::asio::read_until( *socket, buffer, "\n", error );
std::string s( (std::istreambuf_iterator<char>(&buffer)), std::istreambuf_iterator<char>());
boost::asio::读取直到(*套接字,缓冲区,“\n”,错误);
std::string s((std::istreambuf_迭代器(&buffer)),std::istreambuf_迭代器();
似乎拉机制很慢,我需要更快地拉更多的数据。关于我可以做些什么来提高绩效,有什么建议吗?我是否有办法创建另一个套接字并将一些提取工作委托给该套接字?我过去曾在交易应用程序上工作过,可以告诉您,我从未见过任何订单路由系统或实时报价系统实现搜索“\n”的协议。FIX当然不支持这一点。这意味着,在您的订单路由或live quotes价格系统中的某个位置,有一个应用程序最有可能接收那些可能正在使用修复协议的报价消息,并将其转换为您现在使用的协议。这很可能至少与系统运行缓慢的原因有关
如果每个字符串代表一个股票报价,那么我会考虑重写正在广播价格更新的系统以批量发送它们,而不是每秒发送超过3到5次的系统——假设系统没有被自动交易程序使用(这将是完全不同的主题,需要一个非常不同的方法)。. 看起来该应用程序也在以ascii文本格式发送引号。我会把它改成二进制格式。FIX支持二进制格式已经有相当一段时间了,它被称为。自定义二进制协议也是可以接受的
根据您对股票报价所做的处理,我会考虑不要将每个报价传递给不同的线程。如果唯一的处理仅涉及使用新报价更新窗口,则尤其如此。我将通过用户界面线程传递整个缓冲区(假设它有多个引号,并且只包含引号)。如果需要进行其他处理,比如将其保存到磁盘或数据库,那么我将有一个单独的线程来处理这种处理 您没有向我们显示太多代码。如果客户端应用程序运行缓慢,则您可以尝试以下一些改进方法:首先,试着从循环中移出缓冲区-它不应该每次都被重新创建和分配。低是一个相对的术语,你期望什么样的性能?所以你已经分析了代码,分析器指出瓶颈是从套接字读取数据?无论如何,最小化内存分配和深度拷贝的数量可能是值得的。