Создание приложения чата с помощью Ruby
Я пытаюсь создать приложение чата исключительно с помощью Ruby. Есть аналогичный вопрос опубликовано ранее, но у меня есть разные и связанные запросы. Я посмотрел на (Так же, как указано лицом, которое ранее разместило аналогичный вопрос) . Код в Примере, похоже, не работает для меня. При запуске скрипта ruby на терминале и подключении к url:http://localhost:1234 в моем браузере, я бесконечно сталкиваюсь a " передача данных с localhost..." сообщение.
здесь 1234-номер порта, используемый в приведенном примере. Я не могу понять, в чем причина моего неудачного бега. Может быть, мне нужно указать что-то в командной строке при выполнении скрипта или я должен запустить чат(входной выход) через какое-то другое место(возможно, браузер). Я не могу понять, что именно делать. Не могли бы вы мне помочь?
Я бегу код сервера чата практически не изменен. Я запускаю веб-службу и сервер чата на одном хосте.
я смог частично заставить код работать для меня до точки, где начинается цикл. Измененный код, который работал для меня до определенного момента приведен ниже.
require 'gserver'
class BasicServer < GServer
def initialize(*args)
super(*args)
# Keep an overall record of the client IDs allocated
# and the lines of chat
@@client_id = 0
@@chat = []
end
def serve(io)
# io.puts("Hello world!")
# Increment the client ID so each client gets a unique ID
@@client_id += 1
my_client_id = @@client_id
my_position = @@chat.size
# io.puts(@@chat.size)
# Give the total number of people who are currently on chat.. for e.g. 0 => 1 person on chat
# Leave a message on the chat queue to signify this client
# has joined the chat
@@chat << [my_client_id, ""]
# io.puts(@@chat)
end
end
server = BasicServer.new(1234)
server.start
#sleep 120
#server.shutdown
для каждого экземпляра браузера новый клиент подключается к очереди чата(у них есть уникальный идентификатор клиента для их идентификации). Я хотел, чтобы повторно использовать код в Примере, добавив текст box(что-то похожее на то, что мы используем в html) на экземпляр(ы) браузера, где пользователь(ы) может ввести свое сообщение и опубликовать его, используя щелчок кнопки (которая также интегрирована в браузер). Это отражается во всех других экземплярах браузера различных клиентов, и чат продолжается так, пока пользователи не вводят строку "quit", чтобы выйти из чата.
Я не уверен, как реализовать вышеуказанную функцию в Ruby, любые предложения или связанные статьи для ссылки будут действительно полезный.
Спасибо большое!!
1 ответов
Я полагаю, что это единственный код, который вы используете. Способ работы HTTP (протокол, используемый вашим веб-браузером при разговоре с вашим сервером) заключается в том, что браузер подключается к вашим серверам, отправляет несколько строк с указанием, какую страницу он хочет получить, какие куки у него есть и т. д. Затем сервер отвечает, и в большинстве случаев, закрывает соединение. Так что в вашем случае, когда вы подключаетесь к серверу чата в веб-браузере, браузер подключается, BasicServer#serve
получает вызов, некоторые вещи отправляются обратно, и веб браузер закрывает соединение, поэтому сервер не может отправлять дополнительные данные в браузер. Самый простой способ "исправить" это использовать другой способ подключения к вашему серверу (telnet или nc (netcat)). Если вы хотите, чтобы это было в браузере, вам нужно заставить ваш сервер отвечать на HTTP-запросы, а затем вернуть страницу, которая регулярно опрашивает сервер (читайте на AJAX или WebSockets). Вы можете посмотреть это для вдохновения, хотя это не написано в Ruby: https://github.com/ry/node_chat.