Как получить возврат из текстового поля HTML, используя ruby? - PullRequest
0 голосов
/ 18 февраля 2011

Я создаю чат-клиент / серверную систему в Ruby.

Мой сервер будет размещен на ноутбуке или чем-то в этом роде (это классный проект, поэтому не потребуется много вычислительной мощности), а затем я планирую разместить клиент в веб-браузере.

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

Моя проблема в том, что, хотя я могу легко передать HTML-код в браузер и заставить его отображать чат (перейдите по IP-адресу: порт), я не могу понять, как я могу вернуть то, что введенов текстовом поле на сервер.

Кто-нибудь знает, как я мог это сделать?

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

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

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

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

0 голосов
/ 18 февраля 2011

Похоже, вам нужны базовые знания о том, как работают CGI. Как только вы узнаете, что вам будет легче работать с Sinatra, как рекомендовано @echoback, или с Padrino, Rails или с другими языками.

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

#!/usr/bin/env ruby

puts "Content-Type: text/html"
puts 
puts "<html><head><style type='text/css'>body{font-family: monospace;}</style></head><body>"

puts "<form name='foo' action='test_cgi.rb'>"
puts "<input type='textinput' name='inputbox'></input><br />"
puts "<textarea name='textareabox'></textarea><br />"
puts "<input type='submit'></input>"
puts "</form>"

puts "<h4>ENVIRONMENT:</h4>"
puts "<table>"
ENV.keys.sort.each do |k|
  puts "<tr><td>#{k}</td><td>#{ENV[k]}</td></tr>"
end
puts "</table>"

puts "</body></html>"

Скопируйте этот код, сохраните его в Ruby-файле с именем test_cgi.rb, а затем установите исполняемый бит для файла. Переместите этот файл в каталог cgi-bin вашего веб-сервера на вашем компьютере. Используйте свой браузер для доступа к файлу (http://localhost:8080/cgi-bin/test_cgi.rb или что-то похожее) и наблюдайте, как выходные данные в таблице изменяются, когда вы вводите в форму разные значения и отправляете их.

Как только вы поймете, что обход от сервера к браузеру и серверу вам пригодится, вы узнаете, как Sinatra опирается на Rack для более простого предоставления большего количества функций, чем все это самостоятельно с помощью CGI.

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