Дерево страниц

SAYMON документация

Перейти к концу метаданных
Переход к началу метаданных

Архитектура SAYMON позволяет пользователям разрабатывать серверные расширения, добавляющие в SAYMON сервер необходимую им функциональность. Примером такой функциональности могут быть дополнительные сборщики данных, опрашивающие специальное оборудование, или модули, отправляющие нотификации в нужные клиенту каналы (например, syslog или Jabber-чат).

Каждое пользовательское расширение представляет собой актор, написанный на языке JavaScript или TypeScript. Этот актор загружается SAYMON сервером при старте. Ему доступны все внутренние API, которые используются внутри SAYMON сервера.

Более подробную информацию о том, как разрабатывать серверные расширения - акторы - смотрите в примерах в этом разделе.

Акторы

Как уже говорилось, серверное расширение представляет собой актор. Актор - это модуль, который умеет:

  • принимать сообщения
  • отправлять сообщения
  • порождать дочерние акторы

Ключевым свойством актора является его полная изолированность от других модулей и возможность общаться с этими модулями только посредством сообщений. Это позволяет гибко масштабировать акторы в зависимости от нагрузки.

SAYMON сервер использует модель акторов для серверных расширений, поскольку и сам он реализован по модели акторов. В качестве реализации модели акторов используется библиотека Comedy. Для разработки серверных расширений необходимо знакомство с этой библиотекой.

Подробнее о Comedy и акторах можно почитать в статье: Comedy. Акторы в Node.JS для гибкого масштабирования.


Простейший пример

Простейший пример пользовательского расширения - модуль, отправляющий в лог приветствие - выглядит следующим образом:

class HelloWorldActor {
  initialize(selfActor) {
    selfActor.getLog().info('Hello, world!');
  }
}


module.exports = HelloWorldActor;

Для того, чтобы загрузить приведённый выше модуль в SAYMON, нужно сохранить код в файл (допустим, /tmp/saymon-modules/hello-world-actor.js), прописать в конфигурацию сервера параметр "extension_path": "/tmp/saymon-modules" (директорию целиком), и затем перезапустить SAYMON сервер.

{
  ...,
  "server": {
    ...,
    "extension_path": "/tmp/saymon-modules"
  },
  ...
}

После этого в логе SAYMON сервера будет сообщение вида:

Thu Dec 20 2018 11:46:04 GMT+0300 - info: InMemoryActor(5c1b56ccf06c7b030664ff5b, HelloWorldActor): Hello, world!

Более подробные примеры

  • Нет меток