栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用boost :: asio从套接字读取JSON

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用boost :: asio从套接字读取JSON

这是应用程序级协议的领域

要么

  • 读取直到流结束(发送方断开连接);这与保持活动状态超过一条消息的连接不起作用
  • 提供一个标题,
    Content-Length: 12346rn
    以便提前知道要读多少
  • 提供定界符(有点像mime边界,但是您可以使用JSON负载中不允许/不支持的任何序列)(
    async_read_until
  • 将有效负载视为“二进制样式”(例如BSON),并在文本传输之前提供(网络顺序)长度字段。

ASIO
Http服务器示例包含一个很好的模式,用于解析您可以使用的HTTP请求/标头。假设您的解析器可以检测出完整性,只是“软失败”,直到出现所有信息为止。

void connection::handle_read(const boost::system::error_pre& e,    std::size_t bytes_transferred){  if (!e)  {    boost::tribool result;    boost::tie(result, boost::tuples::ignore) = request_parser_.parse(        request_, buffer_.data(), buffer_.data() + bytes_transferred);    if (result)    {      request_handler_.handle_request(request_, reply_);      boost::asio::async_write(socket_, reply_.to_buffers(),          boost::bind(&connection::handle_write, shared_from_this(), boost::asio::placeholders::error));    }    else if (!result)    {      reply_ = reply::stock_reply(reply::bad_request);      boost::asio::async_write(socket_, reply_.to_buffers(),          boost::bind(&connection::handle_write, shared_from_this(), boost::asio::placeholders::error));    }    else    {      socket_.async_read_some(boost::asio::buffer(buffer_),          boost::bind(&connection::handle_read, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));    }  }  else if (e != boost::asio::error::operation_aborted)  {    connection_manager_.stop(shared_from_this());  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号