2010-12-30 14 views
6

私はRubyを使ってチャットアプリケーションを構築しようとしています。先に投稿されたsimilar questionがありますが、私は異なった関連クエリを持っています。私はthis example(以前同様の質問を投稿した人が参照したのと同じです)を見ました。この例のコードは私のために働いていないようです。ターミナルでrubyスクリプトを実行し、ブラウザにURL:http://localhost:1234に接続すると、「localhostからデータを転送しています...」というメッセージが無期限に出ます。Rubyを使ったチャットアプリケーションの構築

ここで1234は、提供されている例で使用されているポート番号です。私の失敗の原因は何かを理解することができません。スクリプトを実行しているときにコマンドラインで何かを指定する必要があるかもしれませんし、他の場所(おそらくブラウザ)からチャット(入力出力)を開始するはずです。私は正確に何をするのか理解できません。これで私を助けてくれますか?

チャットサーバーコードはほとんど変更されていません。私は同じホスト上でWebサービスとチャットサーバーを実行しています。

私はループの開始点まで、私のコードを部分的に動かすことができました。ある時点まで私のために働いていた変更されたコードは以下の通りです。

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 

すべてのブラウザインスタンスで、新しいクライアントがチャットキューに接続されています(これらのクライアントの識別には固有のクライアントIDがあります)。この例のコードを再利用するには、ユーザーがメッセージを入力してクリックを使用してポストするブラウザインスタンスにテキストボックス(htmlで使用するものに似たもの)を追加します。ボタン(ブラウザにも統合されています)。これは、さまざまなクライアントの他のすべてのブラウザインスタンスに反映され、ユーザーがチャットルームを離れるために文字列「quit」を入力するまで、チャットはこのように進みます。

Rubyでも上記の機能を実装する方法がわかりません。参照する提案や関連記事は本当に役に立ちます。

ありがとうございます!

答えて

4

私はこれがあなたが使用している唯一のコードだと推測しています。 HTTP(サーバーと通信する際にWebブラウザが使用するプロトコル)の仕組みは、ブラウザがサーバーに接続し、取得したいページ、取得したCookieなどを示す行を送信するというものです。ほとんどの場合、接続を閉じます。あなたのケースでは、あなたのウェブブラウザでチャットサーバに接続するとブラウザが接続し、BasicServer#serveが呼び出され、いくつかのものが返され、ウェブブラウザが接続を閉じて、サーバはもっと多くのデータをブラウザ。これを「修正する」最も簡単な方法は、サーバー(telnetまたはnc(netcat)のいずれか)に別の方法で接続することです。これをブラウザに入れたい場合は、サーバーからHTTP要求に応答し、サーバーを定期的にポーリングするページを返します(AJAXまたはWebSocketで読み取る)。これはRubyで書かれていませんが、インスピレーションのために見ることができます:https://github.com/ry/node_chat

+0

こんにちは..お世話になり、ありがとうございました。ありがとうございます。私はしばらくして、私は実際に何が望みを得ることができないだろうので、私は実際にはTCPサーバーとWebサーバーを実装していないことを実現しました。 – boddhisattva

+0

これは私がチャットアプリケーションとして構築できるものです: - http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html – boddhisattva

関連する問題