1

我已经为 atmel sam4e(lib,包括)生成了 libwebsockets.a,我需要帮助才能为 atmel SAM4E 运行一个简单的 libwebsockets 客户端。我收到了与 esp32 相关的这个错误。但我已经为 atmel 编译了我的 libwebsockets !

在 src/main.c:25 包含的文件中:./lws/include/libwebsockets.h:266:29:致命错误:mbedtls/esp_config.h:没有这样的文件或目录

4

1 回答 1

2

总结一下,在我深入解释下一步应该做什么之前,让我先描述一下 WebSockets 的实际工作方式以及你目前所处的位置。

要建立 WebSocket 连接,您首先需要使用 HTTP 与服务器“对话”,因为 WebSockets 的工作方式是您向服务器发送 HTTP 请求说“让我们使用 WebSockets 交谈”,此时服务器响应“OK” ,让我们切换协议”,只有在这一点上,才有可能开始使用 WebSockets 发送数据。进一步“深入堆栈”,HTTP 连接是通过 TCP 或 TLS 连接建立的——取决于您是否需要单向或双向身份验证和数据加密之类的东西。因此,您需要让 TCP 或 TLS(本质上实际上是“扩展的”TCP)工作,然后才能进入 HTTP 部分。

假设您已经完成了上述所有操作并与服务器建立了有效的 WebSocket 连接 - 实际上,您仅使用原始 WebSockets 交换聊天数据可能非常乏味,除此之外什么都没有。当然,如果您打算只交换原始聊天消息仅此而已,这很好。然而,一旦额外的需求开始堆积——比如:让我们发送消息时间戳、发件人姓名、图片支持、文件支持等——非常快速地扩展会变得非常烦人,因为本质上你必须开始开发你的通过 WebSockets 发送的自己的协议。原因是:简单的原始 WebSockets 除了“服务器向您发送了 X 个字节,它们就在这里”之外,什么也没有。没有键值标头、消息的“正文”部分或任何类似的概念,只有原始数据传输机制。此外,取决于您的服务器使用哪种技术堆栈(或者如果您是服务器后端的开发人员,您计划自己使用),让它使用原始 WebSockets 而不是在它们之上运行的东西可能更难。为了给你我的经验——我个人建议使用 STOMP 协议之类的东西。甚至在一两天内实现其基本机制也很简单,但它为您提供了更多的灵活性。

总结以上所有内容,以下是您面前的“大图”: 在此处输入图像描述

现在(最终)自下而上地了解您所在的位置以及您的下一步应该是什么:

您提到您已使用某种调制解调器成功连接到 GSM 网络。我假设您只使用 AT 命令“连接到网络”/ BTS,但尚未建立数据连接 - 进入“我有 TCP 工作”部分。在这里,您可以采取两条路径:

  1. 使用调制解调器的 AT 命令打开、发送和接收 TCP 数据。一些调制解调器具有集成的 TCP/IP 堆栈,并具有可用的 AT 命令。好处:如果您的目标是“完成它”,它会更快。缺点:某些调制解调器不提供此功能,与通常的套接字 API 之类的东西相比,命令有时可能不会像您期望的那样运行,调制解调器之间可能存在差异(如果您决定在某个时候更改您的调制解调器),您不会t 控制调制解调器的 TCP/IP 堆栈中发生的任何“魔法”,并且考虑到该区域中的错误实际上并不像人们最初想象的那样罕见 - 这可能很烦人。
  2. 使用 PPP 并将调制解调器与在您的微控制器上运行的 TCP/IP 堆栈集成。在这里,我对如何将调制解调器与 TCP/IP 堆栈集成进行了更广泛的解释。

完成上述任一步骤后,您应该能够与您的服务器建立 TCP(或 TLS,如果您决定采用该路径)连接。一旦建立连接以访问 WebSocket 部分,您需要发送一个 HTTP 请求 - 因此您需要一个 HTTP 客户端。同样有两种可能的路径:要么让某人编写 HTTP 客户端,并且可以在您有限的微控制器资源上运行,要么自己编写一个 - 至少能够发送一个非常简单的 HTTP GET 请求。这并不像听起来那么可怕。请求服务器切换到 WebSocket,请求看起来像这样:

GET /chat HTTP/1.1
Host: server.example.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

一旦服务器响应,您应该有一个有效的 WebSocket 连接,此时您可以实现(或准备好实现)WebSocket 协议,并且可能在此之上运行 STOMP/类似/您自己的协议。

于 2020-06-13T21:11:11.913 回答