MQTT-сервер в Haskell - PullRequest
       14

MQTT-сервер в Haskell

0 голосов
/ 11 января 2019

Я бы хотел реализовать сервер MQTT на Haskell.

У меня уже есть сервер HTTP REST, созданный на Haskell, и я хотел бы добавить некоторые конечные точки MQTT на этот сервер. Например, существует конечная точка POST /foo, позволяющая пользователям отправлять некоторую информацию, которая будет храниться в БД Mongo. Я хотел бы добавить конечную точку MQTT: если кто-то выполняет PUBLISH с темой "/foo", данные будут сохранены в той же базе данных Mongo, используя те же внутренние функции, что и POST. Аналогично для SUBSCRIBE данные должны поступать из серверной базы данных.

Я видел http://hackage.haskell.org/package/mqtt-0.1.1.0 а также https://github.com/lpeterse/haskell-hummingbird Но я не уверен, что их можно использовать в качестве библиотеки для создания конечных точек с конкретными обратными вызовами.

Итак, это двойной вопрос:

  1. Есть ли какие-либо отзывы о внедрении конечных точек MQTT в Haskell?
  2. Является ли объединение серверов HTTP и MQTT хорошей идеей?

1 Ответ

0 голосов
/ 08 февраля 2019

После некоторого расследования, вот мои выводы о MQTT в Хаскеле:

Первая библиотека, которую я нашел, это http://hackage.haskell.org/package/mqtt-hs. Однако она содержит ошибки и больше не поддерживается. Я сейчас использую http://hackage.haskell.org/package/net-mqtt,, который хорошо работает.

Я также понял, что мне не нужно создавать MQTT-сервер: мне просто нужно разработать клиент! Мой MQTT-клиент будет подписываться на стандартном MQTT-сервере (Mosquitto) и обрабатывать данные, полученные в моей базе данных.

Еще одна болевая точка MQTT - аутентификация / авторизация. Мой сервер использует Keycloak для контроля доступа, в то время как Mosquitto использует статический файл ACL. Я решил эту проблему, разработав авторизационный прокси-сервер для MQTT: прокси-сервер находится перед Mosquitto и фильтрует запросы на основе решений Keycloak.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...