Создание приложения чата с использованием Ruby - PullRequest
6 голосов
/ 30 декабря 2010

Я пытаюсь создать приложение чата исключительно с использованием Ruby.Существует похожий вопрос , опубликованный ранее, но у меня есть разные и похожие запросы.Я посмотрел на этот пример (То же, что указано человеком, который ранее опубликовал аналогичный вопрос).Код в примере, кажется, не работает для меня.При запуске сценария ruby ​​на терминале и подключении к URL-адресу: http://localhost:1234 в моем браузере я постоянно получаю сообщение «Перенос данных с локального хоста ...».

Здесь 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

Для каждого экземпляра браузера новый клиент подключается к очереди чата (у них есть уникальные идентификаторы клиентов для их идентификации).Я хотел повторно использовать код в примере, добавив текстовое поле (что-то похожее на то, что мы используем в html) к запущенным экземплярам браузера, где пользователь (и) может ввести свое сообщение и опубликовать его, например, с помощью нажатия кнопкикнопка (которая также встроена в браузер).Это отражается на всех других экземплярах браузера различных клиентов, и чат продолжается до тех пор, пока пользователи не введут строку «выход», чтобы выйти из комнаты чата.

Я не уверен, как реализовать вышеупомянутую функцию в Ruby, любые предложения или связанные статьи будут полезны.

Большое спасибо !!

1 Ответ

4 голосов
/ 31 декабря 2010

Я предполагаю, что это единственный код, который вы используете. HTTP (протокол, используемый вашим веб-браузером при обращении к вашему серверу) работает так: браузер подключается к вашим серверам, отправляет несколько строк, сообщающих, какую страницу он хочет получить, какие файлы cookie он имеет, и т. Д. Затем сервер отвечает, и в большинстве случаев закрывает соединение. Таким образом, в вашем случае, когда вы подключаетесь к серверу чата в веб-браузере, браузер подключается, BasicServer#serve вызывается, некоторые вещи отправляются обратно, и веб-браузер закрывает соединение, поэтому сервер не может отправить больше данных в браузер. Самый простой способ «исправить» это использовать другой способ подключения к вашему серверу (telnet или nc (netcat)). Если вы хотите, чтобы это было в браузере, вам нужно заставить сервер отвечать на запросы HTTP, а затем возвращать страницу, которая регулярно опрашивает сервер (читайте в AJAX или WebSockets). Вы можете посмотреть на это для вдохновения, хотя это не написано на Ruby: https://github.com/ry/node_chat.

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