Replace README with README.md
This commit is contained in:
@@ -1,74 +1,74 @@
|
|||||||
aleesa-irc-go
|
# aleesa-irc-go
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
Сервис для aleesa-bot, работающий с протоколом IRC. С основными сервисами бота работает по протоколу Redis pubsub.
|
Сервис для aleesa-bot, работающий с протоколом IRC. С основными сервисами бота работает по протоколу Redis pubsub.
|
||||||
|
|
||||||
|
## Механика работы
|
||||||
|
|
||||||
Механика работы
|
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
Сервис подписан на pub-sub redis-канал irc. В этот канал пишут остальные сервисы aleesa-bot-а в ответ на запросы этого
|
Сервис подписан на pub-sub redis-канал irc. В этот канал пишут остальные сервисы aleesa-bot-а в ответ на запросы этого
|
||||||
сервиса.
|
сервиса.
|
||||||
|
|
||||||
Формат протокола общения по redis pub-sub - см README от aleesa-misc-go.
|
Формат протокола общения по redis pub-sub - см. документацию в репозитории aleesa-doc.
|
||||||
|
|
||||||
|
## Как это собрать?
|
||||||
|
|
||||||
Как это собрать?
|
Понадобится компилятор go версии 1.22 или более новый.
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
Понадобится golang версии 1.19 или более новая.
|
|
||||||
|
|
||||||
Сам процесс сборки простой, достаточно запустить:
|
Сам процесс сборки простой, достаточно запустить:
|
||||||
|
|
||||||
|
```bash
|
||||||
make
|
make
|
||||||
|
```
|
||||||
|
|
||||||
и через некоторое время мы получаем бинарник aleesa-irc-go. Это и есть наше приложение.
|
и через некоторое время мы получаем бинарник **aleesa-irc-go**. Это и есть наше приложение.
|
||||||
|
|
||||||
|
|
||||||
Как это запустить?
|
## Как это запустить?
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
Приложение тестировалось на alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е.
|
Приложение тестировалось на alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е.
|
||||||
|
|
||||||
После создания data/config.json из data/config_sample.json, можно запускать приложение.
|
После создания **data/config.json** из **data/config_sample.json**, можно запускать приложение.
|
||||||
|
|
||||||
Предполагается, что конфиг написан в формате human json (https://hjson.github.io), который допускает коментарии и
|
Предполагается, что конфиг написан в формате [human json](https://hjson.github.io), который допускает коментарии и
|
||||||
некоторые другие вольности в форматировании json-а. Конфиг ищется последовательно по следующим путям по принципу "кто
|
некоторые другие вольности в форматировании json-а. Конфиг ищется последовательно по следующим путям по принципу "кто
|
||||||
первый того и тапки":
|
первый того и тапки":
|
||||||
|
|
||||||
|
```
|
||||||
~/.aleesa-irc-go.json
|
~/.aleesa-irc-go.json
|
||||||
~/aleesa-irc-go.json
|
~/aleesa-irc-go.json
|
||||||
/etc/aleesa-irc-go.json
|
/etc/aleesa-irc-go.json
|
||||||
data/config.json
|
data/config.json
|
||||||
|
```
|
||||||
|
|
||||||
В каталоге contrib находится скрипт для alpine linux, системы инициализации openrc. Этот скрипт достаточно положить в
|
В каталоге contrib находится скрипт для alpine linux, системы инициализации openrc. Этот скрипт достаточно положить в
|
||||||
/etc/init.d/aleesa-irc-go. После чего скопировать бинарник в каталог /var/lib/aleesa-irc-go, положить конфиг в одну
|
**/etc/init.d/aleesa-irc-go**. После чего скопировать бинарник в каталог **/var/lib/aleesa-irc-go**, положить конфиг в
|
||||||
из дефолтных локаций (тестировалась /var/lib/aleesa-irc-go/data/config.json) и после этого сервис запускается
|
одну из дефолтных локаций (тестировалась **/var/lib/aleesa-irc-go/data/config.json**) и после этого сервис запускается
|
||||||
командой:
|
командой:
|
||||||
|
|
||||||
|
```bash
|
||||||
service aleesa-irc-go start
|
service aleesa-irc-go start
|
||||||
|
```
|
||||||
|
|
||||||
В автозагрузку его можно прописать через команду:
|
В автозагрузку его можно прописать через команду:
|
||||||
|
|
||||||
|
```bash
|
||||||
rc-update add aleesa-irc-go default
|
rc-update add aleesa-irc-go default
|
||||||
|
```
|
||||||
|
|
||||||
|
## Nota Bene
|
||||||
|
|
||||||
Nota Bene
|
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
По механике, в процессе работы мы форкаем горутинки на каждое входящее сообщение, особо не контроллируя этот процесс.
|
|
||||||
Предполагается, что на это приложение не будет большой нагрузки - ограничения irc не должны дать возможности развить
|
|
||||||
достаточно большой message rate, чтобы об это споткнуться.
|
|
||||||
|
|
||||||
Формально, более удачным было бы иметь автоматический пул воркеров-горутинок и раскидывать им через channel-ы
|
|
||||||
сообщения. Внутри каждой горутинки можно было бы повиcнуть в бесконечном цикле на канале входящих сообщений и так и
|
|
||||||
работать. Но на практике оно того не стОит.
|
|
||||||
|
|
||||||
|
|
||||||
Nota Bene #2
|
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в
|
Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в
|
||||||
некотором роде проблема. Решается она с помощью утилиты daemonize (https://github.com/bmc/daemonize).
|
некотором роде проблема. Решается она с помощью утилиты [daemonize](https://github.com/bmc/daemonize).
|
||||||
|
|
||||||
Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно
|
Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно
|
||||||
воспользоваться этой программой.
|
воспользоваться этой программой.
|
||||||
|
|
||||||
В alpine linux есть средства openrc для супервайзинга foreground-сервисов.
|
В alpine linux есть средства openrc для супервайзинга foreground-сервисов.
|
||||||
|
|
||||||
|
Технически, можно было бы решить эту проблему fork()-а с помощью "github.com/sevlyar/go-daemon", но на текущий момент
|
||||||
|
она не стоит остро, поэтому решения не требуется.
|
||||||
|
|
||||||
|
## Nota Bene 2
|
||||||
|
|
||||||
Nota Bene #3
|
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
К сожалению, в боте не подразумевается функциональность invite-ов. Причина банальна - слишком жёсткие ограничения у
|
К сожалению, в боте не подразумевается функциональность invite-ов. Причина банальна - слишком жёсткие ограничения у
|
||||||
многих irc-сетей на количество сообщений в единицу времени, а по механике в большинстве случаев ограничение работает не
|
многих irc-сетей на количество сообщений в единицу времени, а по механике в большинстве случаев ограничение работает не
|
||||||
client-client или client-channel, а глобально, client-server (за исключением случаев, когда на канале у бота есть +v
|
client-client или client-channel, а глобально, client-server (за исключением случаев, когда на канале у бота есть +v
|
||||||
@@ -77,6 +77,6 @@ client-client или client-channel, а глобально, client-server (за
|
|||||||
Сообщения об invite-ах пишутся в лог с уровнем info.
|
Сообщения об invite-ах пишутся в лог с уровнем info.
|
||||||
|
|
||||||
|
|
||||||
Special Thanks
|
## Special Thanks
|
||||||
-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
https://github.com/akyoto/cache за "простой" кэш, из которого я сделал collection.go
|
https://github.com/akyoto/cache за "простой" кэш, из которого я сделал collection.go.
|
||||||
@@ -1 +0,0 @@
|
|||||||
README
|
|
||||||
Reference in New Issue
Block a user