#ruby #ajax #sinatra
#ruby #ajax #sinatra
Вопрос:
Я пишу веб-приложение с использованием Sinatra на встроенном устройстве, и мне нужно иметь возможность отправлять и получать данные через сокет Unix встроенному коду, запущенному на том же устройстве. Скорее всего, мы будем использовать JSON для формата данных, но я не нашел примера, который действительно иллюстрировал бы, как это настроить и взаимодействовать с веб-приложением.
Я ищу как пример кода, который будет прослушивать сокет, так и пример, показывающий, как перенести эти данные на веб-страницу Sinatra. Я видел фрагменты обоих, но ничего, что связывало бы концепции вместе.
Ответ №1:
Я не делал этого лично, но я знаю, что Event Machine поддерживает работу с сокетом unix. Преимущество event machine в том, что вы можете заставить код прослушивать сокет, не «вмешиваясь» в работу веб-сервера sinatra. Таким образом, вы можете, например, прослушивать сокет для получения некоторой статистики, сохранять эти статистические данные в памяти, а затем возвращать их клиентам по HTTP-запросам.
И если вы собираетесь использовать EventMachine, я предлагаю использовать в качестве веб-сервера thin, который реализован поверх него, поэтому вам не нужно запускать его вручную.
Комментарии:
1. Похоже, это может сработать. Итак, в принципе, есть прослушиватель, который сохраняет любые данные, которые он получает, в соответствующую переменную, и запросы AJAX будут обращаться к этому?
Ответ №2:
Я никогда не делал этого лично, но Unicorn может прослушивать сокеты unix и обслуживать приложения Sinatra.
Ответ №3:
Файл app.rb
:
#!/usr/bin/env ruby
require 'sinatra'
SOCKET_PATH = File.expand_path('tmp/app.sock')
class App < Sinatra::Base
set :server, :thin
set :bind, SOCKET_PATH
get '/' do
'Welcome'
end
end
if __FILE__ == $0
App.run!
end
Выполнить: $ ruby app.rb
Gemfile:
source 'https://rubygems.org'
gem 'thin'
gem 'sinatra'