Rubyネットワークプログラミング
Rubyでカスタムネットワーククライアントとサーバーを作成しますか?または、それがどのように機能するかを理解しますか?
次に、ソケットを処理する必要があります。
このルビーネットワークプログラミングのツアーに参加してください 基本を学び、Rubyを使用して他のサーバーやクライアントと会話を始めましょう!
では、ソケットとは何ですか ?
ソケットは通信チャネルのエンドポイントであり、クライアントとサーバーの両方がソケットを使用して通信します。
動作方法は非常にシンプルです :
接続が確立されると、データをソケットに入れることができます。データはもう一方の端に送られ、そこで受信者はソケットから読み取り、着信データを処理します。
ソケットタイプ
使用できるソケットにはいくつかの種類がありますが、最も一般的なのはTCPソケットで、HTTPやFTPなどのTCPベースのサービスに接続できます。
UDPベースのプロトコルを使用する必要がある場合は、UDPソケットを使用できます。
他のタイプのソケットはもう少し難解です。Unixソケットを使用すると、完全なTCP接続のオーバーヘッドなしでUnixシステムでIPC(プロセス間通信)が可能になります。
Rubyでのソケットの使用
ソケットで何ができるかがわかったので、次はソケットの使用を開始します。
まず、プログラムにソケットライブラリを要求します:
require 'socket'
TCPソケットを作成するには、 TCPSocketを使用できます。 クラス、パラメータとして、宛先IPアドレスとポートが必要になります。
これにより、接続の確立が試みられます。接続を確立できない場合は、 Errno ::ECONNREFUSEDが表示されます。 エラー。
socket = TCPSocket.new('google.com', 80)
これで、ソケットを介してメッセージを送信できるようになります。相手が自分を理解できるようにするには、通信しているプロトコルに従う必要があります。
socket.write "GET / HTTP/1.1" socket.write "\r\n\r\n"
使用するメソッドの多くは、TCPSocket
の親クラスからのものです。 。
サーバーからの応答を読み取るには、recvメソッドを使用できます。
ソケットから読み取るバイト数をパラメータとして渡す必要があります:
puts socket.recv(100)
小さな問題があります。データが返されない可能性があり、アプリは何もしていないように見えます。
その理由は、読み取るのに十分なデータがない場合、プログラムが「ブロック」するためです。
これは、利用可能なデータがあるか、サーバーが接続を閉じるまで待機することを意味します 。
使用しているプロトコルに応じて、読み取るデータの量を増減することをお勧めします。
ブロッキングが問題になる場合は、IOクラスのreadpartialメソッドとread_nonblockメソッドを確認してください。
TCPサーバーの作成方法
サーバーを作ろう!プロセスはクライアントの作成に似ていますが、ソケットにバインドするように指示する必要があります インターフェイスに移動してから、聞く その上で、そして最後に受け入れる 着信接続。
TCPServerクラスはすでに最初の2つを実行しています。
ここに例があります :
require 'socket' socket = TCPServer.new('0.0.0.0', 8080) client = socket.accept puts "New client! #{client}" client.write("Hello from server") client.close
サンプルサーバーはポート8080でリッスンし、接続しているクライアントにメッセージを表示します。
1つのクライアントしか受け入れられないことに注意してください。 プログラムは終了します。
複数のクライアントを受け入れる
複数のクライアントを受け入れて応答できるようにするには、ループといくつかのスレッドが必要です。
例 :
require 'socket' PORT = 8081 socket = TCPServer.new('0.0.0.0', PORT) def handle_connection(client) puts "New client! #{client}" client.write("Hello from server") client.close end puts "Listening on #{PORT}. Press CTRL+C to cancel." loop do client = socket.accept Thread.new { handle_connection(client) } end
これで、停止するまでリッスンし続ける新しいサーバーが起動するはずです。
これを次のレベルに引き上げ、RubyでWebサーバーを作成する方法を学びたい場合は、このブログ投稿を読んでください。
結論
TCPソケットとは何か、それらがどのように機能するか、TCPServer
などのRubyクラスをどのように使用できるかを学びました。 &TCPSocket
インターネット上の他のマシンと対話できるRubyアプリケーションを作成します。
ルビーネットワークプログラミングで遊ぶのは楽しいです!
次に、クールなものを作成して全員と共有します コメントセクションで🙂
また、Rubyのスキルをさらに向上させたい場合は、私のニュースレターに参加することを忘れないでください!
-
Rubyでの新しいプログラミング言語の構築:インタープリター
Githubのフルソース Stoffleプログラミング言語の完全な実装は、GitHubで入手できます。バグを見つけたり質問がある場合は、遠慮なく問題を開いてください。 このブログ投稿では、完全にRubyで構築されたおもちゃのプログラミング言語であるStoffleのインタープリターの実装を開始します。このプロジェクトの詳細については、このシリーズの最初の部分をご覧ください。 これから作成するインタプリタは、一般にツリーウォークインタプリタと呼ばれます。このシリーズの前回の投稿では、トークンのフラットシーケンスをツリーデータ構造(抽象構文木、または略してAST)に変換するパーサーを構築しま
-
Rubyでの関数型プログラミング(完全ガイド)
関数型プログラミングについて聞いたばかりで、いくつか質問があるかもしれません。 いいね… 関数型プログラミングとは正確には何ですか? オブジェクト指向プログラミングと比較してどうですか? Rubyで関数型プログラミングを使用する必要がありますか? これらの質問に答えて、これがどのように機能するかをよりよく理解できるようにします。 関数型プログラミングとは これは単なる流行や派手な言葉ではなく、長い間存在していた実際のプログラミングパラダイムですが、最近人気を取り戻しています。 そして、このパラダイムの背後にある基本的な考え方は、あなたが思っているよりも理解しやすいです。 関数型