Создание чат-приложения с использованием Ruby

Я пытаюсь создать чат-приложение исключительно с использованием 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, любые предложения или связанные статьи, на которые можно было бы сослаться, были бы действительно полезны.

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


person boddhisattva    schedule 30.12.2010    source источник


Ответы (1)


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

person sarahhodne    schedule 31.12.2010
comment
Привет .. спасибо за терпение, а также спасибо за ваш ответ .. !!. Через некоторое время я понял, что на самом деле я внедрял tcp-сервер, а не веб-сервер, поэтому я не смог бы получить желаемое. - person boddhisattva; 03.01.2011
comment
Вот что я мог бы создать в качестве приложения для чата: - boddhisattvadedicates. blogspot.in/2011/08/ - person boddhisattva; 27.03.2012