【问题标题】:Arduino websocket client and Tyrus websocket server message communication issue?Arduino websocket 客户端和 Tyrus websocket 服务器消息通信问题?
【发布时间】:2015-06-18 06:23:48
【问题描述】:

我正在使用以下 Arduino 函数通过 websocket 通信发送数据:

void WebSocketClient::sendEncodedData(String& str, uint8_t opcode) {

uint8_t mask[4];
int size = str.length()+1;

// Opcode; final fragment
socket_client->write(opcode | WS_FIN);

// NOTE: no support for > 16-bit sized messages
if (size > 125) {
    socket_client->write(WS_SIZE16 | WS_MASK);
    socket_client->write((uint8_t)(size >> 8));
    socket_client->write((uint8_t)(size & 0xFF));
}
else {
    socket_client->write((uint8_t)size | WS_MASK);
}

mask[0] = random(0, 256);
mask[1] = random(0, 256);
mask[2] = random(0, 256);
mask[3] = random(0, 256);

socket_client->write(mask[0]);
socket_client->write(mask[1]);
socket_client->write(mask[2]);
socket_client->write(mask[3]);

for (int i = 0; i<size; ++i) {
    socket_client->write(str[i] ^ mask[i % 4]);
}
}  

这个函数属于这个 Arduino websocket 客户端实现library

我使用 Tyrus 项目的 java websocket 服务器代码如下:

public static void runServer() {
    Server server = new Server("192.168.1.105", 8025, "/websockets", ArduinoEndPoint.class);
    try {
        server.start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Please press a key to stop the server.");
        reader.readLine();
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        server.stop();
    }
}

上述代码中的ArduinoEndPoint类代表了@onMessage、@onOpen和@onClose注解方法的简单实现。

我的问题是,当我从 Arduino 发送少于 25 个字符的消息时,它会在服务器上收到,但不会收到所有超过 25 个字符的消息。
Websocket 服务器使用 Tyrus java websocket 客户端实现处理任何消息大小。我在这里缺少什么?

【问题讨论】:

  • 您使用的是哪个版本的 Tyrus? (1.10 是最新的稳定版)。这似乎是 grizzly 服务器的问题,因为 Tyrus 会在收到任何消息时触发 @On* 方法。无论如何,我们有很多发送相似消息大小的测试并且都通过了,所以它可能与一些 TCP 相关环境?就像在连接的任一侧缓冲..

标签: java c++ websocket arduino tyrus


【解决方案1】:

根据Arduino-Websocket 文档,它支持长度为 65535 个字符(16 位),因此这不是 Arduino-Websocket 客户端代码中的问题,而是与 Tyrus 服务器有关。

尝试在支持 Web Socket 的 Tomcat 8 中创建一个 Web 应用程序并使用 Arduino 连接并查看。我已经这样做了,没有遇到任何问题。

【讨论】:

  • 我也做到了,而且工作得很好。是的,你是对的,tyrus websocket 服务器有问题,但我找不到它是什么?
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2016-02-24
相关资源
最近更新 更多