Создание приложения чата с помощью 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.