【问题标题】:NodeMCU broadcast to all clientsNodeMCU 向所有客户端广播
【发布时间】:2019-04-01 00:25:16
【问题描述】:

我想向所有连接到我的 esp8266 12f 接入点的客户端广播一个请求

我用它来为每个客户端创建一个连接,这意味着如果有 3 个客户端,它将创建 3 个连接。

for mac,ip in pairs(wifi.ap.getclient()) do

   srv= net.createConnection(net.TCP, 0)
   srv:on("receive", function(client, b_response) srv:close() collectgarbage() end)
   srv:on("connection", function(client, b_request) client:send(request) end)
   srv:connect(80, ip)

end

我尝试了广播 ip srv:connect(80, "255.255.255.255") 但没有发送任何内容

问题:-

我使用的每个srv 将覆盖以前的srv,因此如果延迟我无法得到响应,即使这样我也可以用不同的名称命名每个srv,例如srv_1、@987654327 @, srv_3 但这会占用太多内存。

我想要什么

只创建一个连接?

【问题讨论】:

    标签: tcp lua broadcast esp8266 nodemcu


    【解决方案1】:

    您的代码使用 TCP,它本质上是一个单连接、点对点协议。没有“广播”TCP 连接之类的东西。 TCP 根本无法使用广播。这就像试图将汽车用作船一样。

    如果您要发送少量信息,您可以尝试使用 UDP。缺点是 UDP 不可靠——你不能确定你的消息是否被接收——而且你需要更多的代码来接收响应,如果你想要一个,你需要建立一个可靠性机制(重新传输如果没有收到答案,请检测重传以防答案被丢弃)如果您关心的话。

    我建议您查看 MQTT 协议 - 它旨在简化与多个客户端的通信。它是轻量级的,MQTT 客户端在 NodeMCU 和 Arduino 处理器上运行良好。有an MQTT client built into NodeMCU's LUA implementation

    缺点是您需要一个所有 NodeMCU 都将连接到的 MQTT 代理。代理通常在功能更强大的处理器上运行(Raspberry Pi 是一个不错的选择)或在 Internet 上运行(Adafruit 在https://io.adafruit.com/ 提供代理),尽管there are some implementations that run on an ESP8266

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2015-07-03
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2016-12-02
      • 2021-09-02
      相关资源
      最近更新 更多