同一 ESP32 上的应用程序之间的消息传递

Messaging between apps on the same ESP32

我想我找到了一种在 ESP32 内部的应用程序之间进行通信的方法。无论如何,它有效。 是的,我对这种方法的合法性有些怀疑,所以我要对你说。

我记得存在魔法地址“127.0.0.1”——loopback 地址也称为 本地主机。在日常生活中,这个地址通常用于与程序员使用的同一台计算机建立 IP 连接。例如,如果我正在编写客户端服务器,那么使用 localhost 我可以在一个应用程序中调试交换协议,而无需使用额外的计算机.

同时使用环回接口绕过任何本地网络接口硬件。

而且我认为有可能在您的系统中遵守了这一原则,我只需要尝试一下:如果可行怎么办?

而且确实有效。以下是两个应用程序的文本和并行终端的屏幕截图。 Receiver.toit app 先启动,然后 sender toit.

receiver.toit:

import net
main :
  network_interface := net.open
  serverSocket := network_interface.tcp_listen 1234
  print ("Wait...")
  socket := serverSocket.accept
  print ("Accept was done...")
  data := socket.read
  clientAddr := socket.peer_address.ip.stringify
  print ("[$clientAddr]->[$data.to_string]")
  socket.close
  print ("Socket closed...")
  serverSocket.close
  print ("ServerSocket closed...")

sender.toit:

import net
LOOPBACK := "127.0.0.1"
main :
  network_interface := net.open
  clientSocket :=  network_interface.tcp_connect LOOPBACK 1234
  print ("Connect...")
  clientSocket.write "Hello from flatmate..."
  print ("Write was done...")
  clientSocket.close
  print ("Socket closed...")

接收端:

micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$ toit -d=dell run receiver.toit
2021-10-08T06:41:03.937058Z: <process initiated>
Wait...
Accept was done...
[127.0.0.1]->[Hello from flatmate...]
Socket closed...
ServerSocket closed...
2021-10-08T06:41:35.166388Z: <process terminated - exit code: 0>
micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$ 

发件人终端:

micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$ toit -d=dell run sender.toit
2021-10-08T06:41:34.641365Z: <process initiated>
Connect...
Write was done...
Socket closed...
2021-10-08T06:41:34.917420Z: <process terminated - exit code: 0>
micrcx@micrcx-desktop:~/toit_apps/Hsm3/tests$ 

在一台设备上使用 TCP 连接是一种受支持且应该有效的方案。但是,服务器没有防火墙,同一网络上的任何机器都可以连接到 ESP32 上 运行 的服务器。

另一种方法是使用本地 pubsub。看看这里的教程:https://docs.toit.io/platform/tutorials/pubsub/pubsubint

本地pubsub更轻量级和内部,但它是一种广播机制。发送方只是发送数据,任何正在监听的接收方都会收到数据。如果正确接收每条消息很重要,您需要在顶部实施一个小协议。

未来还会有专门的机制(目前称为“RPC”)在不同的应用程序之间进行有效对话。