postjson.消息体大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postjson.消息体大小相关的知识,希望对你有一定的参考价值。

参考技术A JSON消息体大小200字以上的回复消息,一般是针对某些特殊请求的复杂回复,比如查询某个数据库表格中的记录,需要将查询结果封装成JSON格式的消息返回给客户端,这样的消息体就会大于200字。 参考技术B 根据HTTP协议,没有限制,但是实际上受到HTTP服务器的限制,它可能会拒绝大小超过一定值的消息体。一般来说,这个值可以在服务器配置中设置,具体取决于服务器的性能和安全性要求。 参考技术C JSON消息体大小没有明确的限制,具体情况取决于服务器端的设置,一般而言,服务器端可以处理8KB以上的数据,但是也有可能处理更大的JSON消息体。 参考技术D 若消息体大小超过200字,可使用分块传输,将消息体分为多个块,然后将每个块都作为一个单独的postjson消息发送出去,服务器接收时,将每个块重新组合即可。 第5个回答  2023-03-10 POST JSON消息的体大小可以有很多种不同的大小。有些服务器可以处理数据体大小为8KB或者更大的请求,而有些服务器可以处理更大的请求,比如1MB或更大。此外,还可以通过调整浏览器的最大响应大小来改变POST JSON消息的体大小。

将 Ros 消息的动态大小保存在数组中

【中文标题】将 Ros 消息的动态大小保存在数组中【英文标题】:Save dynamic size of Ros messages in arrays 【发布时间】:2021-04-02 01:47:27 【问题描述】:

我使用 Ros-Yolo 神经网络进行图像识别。我想将通过 Ros-Yolo 神经网络接收到的边界框存储在一个数组中。数组的每个位置应该是下面的结构体。

struct rectangle_box 
  long x_max;
  long y_max;
  long x_min;
  long y_min;
;

由于接收到的边界框的数量会不断变化,我需要一个动态数组。 我现在的问题是哪种程序更明智。

    创建一个上述结构类型的动态数组是否更有用,它会根据每个新收到的消息调整其大小。例如使用 malloc() 函数。 或者创建一个我定义的足够大的数组来存储足够的边界框是否更有用。例如:std::array bounding_box_in_pixel;

但我需要能够全局访问存储的边界框。

这是我接收边界框数据的回调

void callback_baunding_box (const darknet_ros_msgs::msg::BoundingBoxes::SharedPtr bounding_boxes_msgs)




这就是我在第二种情况下的解决方法。

struct rectangle_box 
  long x_max;
  long y_max;
  long x_min;
  long y_min;
;

std::array <rectangle_box, 1024> bounding_boxes_in_pixel;

void callback_baunding_box (const darknet_ros_msgs::msg::BoundingBoxes::SharedPtr bounding_boxes_msgs)

  for (unsigned long i = 0; i < bounding_boxes_msgs->bounding_boxes.size(); i++)
  
    bounding_boxes_in_pixel.at(i).x_max = bounding_boxes_msgs->bounding_boxes.at(i).xmax;
    bounding_boxes_in_pixel.at(i).y_max = bounding_boxes_msgs->bounding_boxes.at(i).ymax;
    bounding_boxes_in_pixel.at(i).x_min = bounding_boxes_msgs->bounding_boxes.at(i).xmin;
    bounding_boxes_in_pixel.at(i).y_min = bounding_boxes_msgs->bounding_boxes.at(i).ymin;
  

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。看看这个非常简单的建议:

创建一个具有您期望的最大元素大小的向量。这会在后台为您的项目分配一个内存块。

std::vector<rectangle_box> bounding_boxes_in_pixel(1024);

在每次回调时,调整向量的大小。缩小尺寸不会导致重新分配。这意味着,再次增加大小(不比以前大)也不会导致重新分配 (see this question)。

void callback_baunding_box (const darknet_ros_msgs::msg::BoundingBoxes::SharedPtr bounding_boxes_msgs)

    //Resize
    bounding_boxes_in_pixel.resize(bounding_boxes_msgs->bounding_boxes.size());
    //Continue to fill
    ...

当然,调整向量的大小也确实需要一些最少的时间(基本上是检查和设置新的大小变量)。但我认为这应该是可以接受的,因为解决方案非常简单易懂。

【讨论】:

非常感谢您的回答。这对我帮助很大。

以上是关于postjson.消息体大小的主要内容,如果未能解决你的问题,请参考以下文章

linux C ,消息队列问题,急求

将 Ros 消息的动态大小保存在数组中

调用WCF时,调用已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定。

解析 POST json 消息 Django/GAE 的问题

RocketMQ 消息发送

SpringBoot 请求消息体解密(通信加密解密)