首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ArduinoHTTPClient websocket未记录的最大消息大小?

ArduinoHTTPClient websocket未记录的最大消息大小?
EN

Stack Overflow用户
提问于 2020-01-08 02:10:18
回答 1查看 206关注 0票数 0

我有一台Arduino MKRNB 1500 (具有LTE-M网络功能)。我的代码使用websocket将消息上传到服务器。这些消息大约每秒上载800-1000字节。我的websocket服务器接受这些消息(我已经尝试使用浏览器客户端)。但是ArduinoHTTPClient库WebSocketClient拒绝发送超过128字节的消息。从那时起,Arduino就会挂起来。由于网络延迟,这意味着我每秒发送的字节不能超过600字节。这一限制看起来很随意,据我所知没有记录在案。使用下面的代码可以很容易地重现它。由于LTE-M的网络延迟约为150ms,因此不能更频繁地发送较小的消息。

如何发送更大的消息?

代码语言:javascript
运行
复制
#include <ArduinoHttpClient.h>
#include <MKRNB.h> //For LTE-M or NB-IOT connections
#include "arduino_secrets.h"

// initialize the LTE-M library instance
NBClient nbClient;
GPRS gprs;
NB nbAccess;
char server[] = "echo.websocket.org";  // server address
const char PINNUMBER[] = "0000";  //  = SIM SECRET_PINNUMBER;
int port = 80; // port 80 is the default for HTTP
WebSocketClient client = WebSocketClient(nbClient, server, port);

int count = 120;

void setup() {
  Serial.begin(9600);
  // LTE-M connection
  Serial.println(F("Connecting to LTE-M network"));
  boolean connected = false;
  while (!connected) {
    if ((nbAccess.begin(PINNUMBER) == NB_READY) &&
        (gprs.attachGPRS() == GPRS_READY)) {
      connected = true;
    } else {
      Serial.println("Not connected");
      delay(1000);
    }
  }
}

void loop() {
  Serial.println("starting WebSocket client");
  client.begin();

  while (client.connected() and count <= 1000) {
    Serial.print("Sending hello ");
    Serial.println(count);

    // send a hello #
    client.beginMessage(TYPE_TEXT);
    client.print(count);
    client.print(": ");
    int i = 0;
    while (i<= count){
      client.print("X");
      i++;
    }
    client.endMessage();

    // increment count for next message
    count++;

    // check if a message is available to be received
    int messageSize = client.parseMessage();

    if (messageSize > 0) {
      Serial.println("Received a message:");
      Serial.println(client.readString());
    }
    delay(1000);
  }

  Serial.println("disconnected");
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-14 01:33:03

检查ArduinoHttpClient库后,发现WebSocketClient.h文件在第89行定义了一个有限的缓冲区:

代码语言:javascript
运行
复制
uint8_t iTxBuffer[128];

我把它改成

代码语言:javascript
运行
复制
uint8_t iTxBuffer[4096];

问题就解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59633872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档