0

チャットアプリケーションのように、データを並行して送受信するアプリケーションを作成したいと思います。データを受信した場合だけでなく、入力を取得して出力も送信します。プロトコルとしてUDPを使用したい。私はルビー1.9.3を使用しています。

データを受け取るコードは次のとおりです。

@s = UDPSocket.new
@s.bind(localhost, 1234)

Socket.udp_server_loop_on([@s]) do |message, sender|
  #do something
end

このコードは、アプリケーションの他の部分から独立して実行する必要があり、ブロックしないでください。

スレッドを使用する必要がありますか?私はネットワークプログラムを試したことがなく、プロの開発者でもないので、しばらくお待ちください。おそらく私のコード/デザインはただのがらくたなので、これが専門家によってどのように行われているのか教えてください!;)

4

2 に答える 2

2

UDP は、ソケットを介して個別のアトミック メッセージを受信し、同じ方法で応答できるため、この種のノンブロッキング処理に非常に自然に役立ちます。

そのループ内では、物事を迅速に処理し、応答メッセージを送信するようにしてください。長いブロッキング コールを行うと、ループが停止し、応答時間に影響します。

EventMachineは、非同期アプリケーションを作成するための構造を提供し、UDP および TCP ソケットを処理するための独自のメソッドを備えています。

すでに実装されているソリューションを確認することを忘れないでください。チャット アプリケーションの場合、Socket.IOは出発点として最適です。

于 2013-01-03T18:55:23.900 に答える
1

Eventmachineブロック IO を非常に効率的に処理する gem を確認する必要があります。とりわけ、TCP および UDP サーバー/クライアント API も提供します。

于 2013-01-03T18:50:14.530 に答える