NodeMCU транслирует всем клиентам

Я хочу передать запрос всем клиентам, подключенным к моей точке доступа 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, srv_2, srv_3, но это займет слишком много памяти.

Что я хочу

Создать только одно соединение?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
905
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код использует TCP, который по своей сути является протоколом точка-точка с одним подключением. Не существует такой вещи, как "широковещательное" TCP-соединение. TCP просто не работает с широковещательной рассылкой. Это все равно, что пытаться использовать машину как лодку.

Если вы отправляете небольшой объем информации, вы можете попробовать UDP. Недостатки заключаются в том, что UDP ненадежен - вы не можете быть уверены, что ваше сообщение было получено - и вам понадобится намного больше кода для получения ответа, если вы этого хотите, и вам нужно будет создать механизм надежности (повторная передача если ответ не получен, обнаруживайте повторные передачи в случае, если ответ был отброшен), если вам это небезразлично.

Я бы порекомендовал вам проверить протокол MQTT - он разработан, чтобы упростить общение с несколькими клиентами. Он легкий, и клиенты MQTT хорошо работают на процессорах NodeMCU и Arduino. Есть клиент MQTT, встроенный в реализацию LUA NodeMCU.

Обратной стороной является то, что вам понадобится брокер MQTT, к которому будут подключаться все ваши NodeMCU. Брокер обычно запускается на более мощном процессоре (Raspberry Pi - хороший выбор) или извне в Интернете (Adafruit предлагает брокера по адресу https://io.adafruit.com/), хотя есть некоторые реализации, которые работают на ESP8266.

Другие вопросы по теме