Для клиентов, подключающихся к серверу, это звучит как типичная конфигурация клиент / сервер: одни клиенты отправляют данные, а другие запрашивают их.Есть ли какая-то причина, по которой вы не используете стандартный HTTP-клиент / сервер, то есть веб-сервер, вместо того, чтобы изобретать велосипед?Используйте Sinatra, Padrino или даже Rails, и вы в основном закончите.
Как мне хранить данные между потоками?
Модуль потоков Ruby включает Queue
, что хорошо для перемещения данных между потоками.На странице документа есть пример, который должен помочь.
Те же идеи использования очереди применимы и к использованию таблиц.Я бы рекомендовал использовать базу данных в качестве очереди для вашего использования, а не делать это в памяти.Отключение питания или сбой приложения приведет к потере всех данных, если они находятся в очереди в памяти, а клиенты не получили все данные.Запись и чтение базы данных означает, что данные пережили бы такие проблемы.
Сохраняйте схему простой, предоставьте разумный индекс для нее, и она должна быть достаточно быстрой для большинства применений.Вам понадобится некоторый служебный код для поддержания чистоты базы данных, но это легко сделать с помощью SQL или ORM, например, Sequel или ActiveRecord.