Создание службы Linux в Ruby, с которой могут взаимодействовать другие процессы, возможно, через сокет? - PullRequest
1 голос
/ 09 марта 2012

Я изучаю создание службы, работающей в фоновом режиме, которая позволяет клиентам подключаться, отправлять команды и получать данные обратно.Я планирую написать сервис на Ruby (как драгоценный камень), но хотел знать, какой лучший способ будет позволить клиентам подключаться к API?

Я полагал, что сокетное соединение имело бы смысл, какВы бы связались с Redis или чем-то еще, но я не уверен, с чего начать!

Любые советы будут очень благодарны:)

Ответы [ 4 ]

2 голосов
/ 09 марта 2012

Поскольку вы просите о каких-либо советах, я советую вам, что создание сервисного контейнера - тяжелая работа.Так как вам на самом деле это не нужно, так как уже есть множество отличных сервисных контейнеров, вам, вероятно, следует использовать один из них.

Я бы порекомендовал кое-что за HTTP, что дает вам массу преимуществ по сравнению с существующими инструментами., создание сообщений, согласование контента, масштабирование вашей службы, а также модели развертывания и обновления.

Если вы хотите избежать внешних зависимостей, используйте что-то вроде Webrick или Mongel, являющееся чистым Ruby, и это отличный способ избежать необходимости переносаApache или Nginx вокруг вашей системы.

Это также позволяет вам выделить проблемы в вашем проекте: сначала поработать над созданием фактического уровня обслуживания, обработать команды и вернуть ответы.Запустите его на любом веб-сервере и начните работу.

Затем, когда у вас будет время, сконцентрируйтесь отдельно на том, как создать контейнер службы для удовлетворения ваших потребностей: поскольку вы знаете, что базовый уровень службы работает нормально, выможет сосредоточиться только на решении проблем с контейнерами.

Если вы действительно хотите создать свой собственный контейнер, я настоятельно рекомендую вам использовать что-то более высокое, чем сокет.Такие инструменты, как 0mq , обеспечивают кадрирование и другие функции слоя сообщений, которые вы не получаете из сокета, и значительно упрощают сосредоточение внимания на определении интересных частей вашего проблемного пространства - команд - вместо низкого уровнятакие детали, как синтаксический анализ формата и протокола.

2 голосов
/ 09 марта 2012

Да, вы на правильном пути. Сокет - это просто двунаправленный канал связи, который позволяет двум программам обмениваться байтами. Если обе конечные точки находятся на одном компьютере, сокеты UNIX являются очевидным выбором; в противном случае вам понадобится сокет TCP для связи по сети. Принцип одинаков в обоих случаях.

В верхней части сокета вам придется определить свой собственный протокол, или вы можете использовать существующий (например, HTTP), если он применим к вашей ситуации.

Учебник по случайным сокетам.

0 голосов
/ 09 марта 2012

В прошлом я создал пару демонов с EventMachine .Он эффективный и мощный, поддерживает TCP, HTTP и все остальное.Люди даже пишут веб-серверы поверх него.

0 голосов
/ 09 марта 2012

Я использую приложение Ruby / Rails с Redis, работающим в фоновом режиме на сервере EC2 (Amazon Web Services AWS). Это сборка Ubuntu, с которой мне было проще всего работать:

Linux version 2.6.32-341-ec2 (buildd@crested) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #42-Ubuntu SMP Tue Dec 6 14:56:13 UTC 2011

В моем основном файле .rb, который выполняет большую часть опроса / поиска, у меня есть эти рубины, вы обязательно должны их проверить:

require 'aws'
require 'redis'
require 'timeout'
require 'json'

Дайте мне знать, что вы конкретно пытаетесь сделать, если это не поможет вам достаточно. Удачи!

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