フッターコンテンツにスキップ
.NETヘルプ

Socket io .NET(開発者向けの仕組み)

Socket.IO サーバーは、リアルタイムの双方向およびイベント駆動通信を促進する堅牢なライブラリとして位置づけられています。 これは、チャットアプリケーション、ライブアップデート、コラボレーションプラットフォームなどのタスクにおいてWebアプリケーションで広く使用されています。 Socket.IOは通常JavaScriptと関連付けられていますが、C#を使用してクライアント側で効果的に使用することもできます。 クライアントは時折、Webブラウザである可能性があります。 この記事では、C#環境でSocket.IOクライアントを設定および使用する方法を探ります。 基本的な例をいくつか紹介し、その利点と可能な使用ケースを結論として述べます。

Socket.IO 接続を確立する方法

Socket.IO 接続は、さまざまな低レベルトランスポートを使用して確立できます。

  • HTTP ロングポーリング
  • Webソケット

    • Webトランスポート

Socket io .NET (開発者向けの仕組み): 図 1 - クライアントサーバー通信アプリケーション

Visual Studio 2022でコンソールプロジェクトを作成する

Visual Studioを開き、スタートウィンドウで新しいプロジェクトを作成を選択します。

Socket io .NET (開発者向けの仕組み): 図 2 - 新しいプロジェクトの作成ウィンドウを示すスクリーンショット。

Visual Studio 2022でコンソールアプリケーションを作成するには、Visual Studioを起動し、スタートウィンドウから"新しいプロジェクトを作成"を選択します。 "コンソールアプリ"テンプレートを選択し、プロジェクトの名前と場所を設定し、.NET 6.0が選択されていることを確認します。

Socket.IOとは何ですか?

Socket.IOは、ウェブクライアントとサーバーがリアルタイムで通信する力を持つJavaScriptライブラリです。 それは2つの部分で構成されています:

Socket IOの部品

  • クライアントサイドライブラリ: ブラウザで実行されます。
  • サーバーサイドライブラリ: Node.jsで実行されます。

必要なパッケージをインストールする

Visual Studioで .NETアプリケーションにSocket.IOを使用するには、互換性のあるサーバー実装が必要です。 そのような実装の一つが.NET用のSocketIoClientDotNetであり、C#アプリケーションからSocket.IOクライアントがSocket.IOに接続できるようにします。

まず、必要なNuGetパッケージをインストールしてください。 これをPackage Manager Consoleを経由して行うか、プロジェクトファイルにリファレンスを追加することで行うことができます:

Install-Package SocketIoClientDotNet

SocketIoClientDotNetパッケージのスクリーンショット

Socket io .NET (How It Works For Developers): Figure 3 - Install Socket.IO for NET using the Manage NuGet Package for Solution by searching SocketIoClientDotNet package name in the search bar of NuGet Package Manager, then select the project and click on the Install button.

このコマンドを実行すると、Socket.IOクライアントライブラリがあなた for .NETプロジェクトに組み込まれ、C#アプリケーションがユーザーとシステム間の通信を促進しながらSocket.IOサーバーに接続できるようになります。

Socket.IO の作成

C#クライアントに取り掛かる前に、Visual Studioで.NET Coreコンソールアプリを使用した基本的なSocket IOの例を設定しましょう。 これにより、クライアント実装をテストできます。

サーバー実装の作成

以下のコードは、クライアント接続をポート 3000 でリッスンする基本的な Socket.IO サーバーを C# で設定します。クライアントからメッセージが送信されると、サーバーはメッセージをログに記録し、受信を確認するためにクライアントに応答します。

using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Quobject.SocketIoClientDotNet.Client;

namespace DemoApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Connect to the Socket.IO server
            var socket = IO.Socket("http://localhost:3000");

            // Listen for the "connect" event
            socket.On(Socket.EVENT_CONNECT, () =>
            {
                Console.WriteLine("Connected to the server!");

                // Emit a message to the server
                socket.Emit("message", "Hello from C# client!");

                // Listen for messages from the server
                socket.On("message", (data) =>
                {
                    Console.WriteLine("Message from server: " + data);
                });
            });

            // Listen for the "disconnect" event
            socket.On(Socket.EVENT_DISCONNECT, () =>
            {
                Console.WriteLine("Disconnected from the server!");
            });

            // Keep the console window open
            Console.ReadLine();
        }
    }
}
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Quobject.SocketIoClientDotNet.Client;

namespace DemoApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Connect to the Socket.IO server
            var socket = IO.Socket("http://localhost:3000");

            // Listen for the "connect" event
            socket.On(Socket.EVENT_CONNECT, () =>
            {
                Console.WriteLine("Connected to the server!");

                // Emit a message to the server
                socket.Emit("message", "Hello from C# client!");

                // Listen for messages from the server
                socket.On("message", (data) =>
                {
                    Console.WriteLine("Message from server: " + data);
                });
            });

            // Listen for the "disconnect" event
            socket.On(Socket.EVENT_DISCONNECT, () =>
            {
                Console.WriteLine("Disconnected from the server!");
            });

            // Keep the console window open
            Console.ReadLine();
        }
    }
}
$vbLabelText   $csharpLabel

コードの説明

スニペットでは、まず IO.Socket("http://localhost:3000") を呼び出して Socket.IO クライアント インスタンスを作成し、クライアント マシンのポート 3000 で実行されているローカル サーバーに接続します。

接続が成功すると (Socket.EVENT_CONNECT)、サーバーに接続されたことを示すメッセージが出力されます。

次に、socket.Emit("message", "Hello from C# client!") を使用してクライアントからサーバーにメッセージを送信します。 これにより、"Hello from C# client!"という内容のメッセージがサーバーに送信されます。

次に、socket.On("message", (data) => { ... }) を使用して"message" イベントのためにコールバックを登録することで、サーバーからのメッセージをリッスンします。 })。 クライアントからサーバーへの接続が切断された場合 (Socket.EVENT_DISCONNECT`)、切断を示すメッセージを印刷します。

クライアントからサーバーへの接続が切断された場合 (Socket.EVENT_DISCONNECT)、切断を示すメッセージを出力します。

最後に、Console.ReadLine() メソッドは、プログラムが実行直後に終了しないように、コンソール ウィンドウを開いたままにします。 Socket io .NET (開発者向けの機能): 図4 - サンプルコード

コードのスクリーンショット

Socket io .NET (開発者向けの仕組み): 図 4 - サンプル コード

ロングポーリングは、クライアント(通常はWebブラウザ)とサーバーの間でライブラリを使用してメッセージを送信するWeb開発で使用される技法です。

連続したポーリングを必要とせずに、クライアントが受信できるイベントをサーバー側でトリガーすることにより、リアルタイム通信を可能にします。 この方法は、チャットアプリケーションや株式ティッカーなどの即時更新が要求されるアプリケーションに特に有用です。 このメソッドは、チャットアプリケーションや株価ティッカーなど、即時の更新が必要なアプリケーションに特に便利です。

Socket io .NET (開発者向けの仕組み): 図 5 - HTTP ロングポーリング

WebSocketは、単一のTCP接続を介して全二重通信チャンネルを確立することによって双方向通信を促進します。

このプロトコルは、クライアント(通常はWebブラウザ)とサーバー間でリアルタイムの対話を可能にし、両方の当事者が非同期でメッセージを交換できるようにします。 このプロトコルは、通常はウェブブラウザーであるクライアントとサーバー間でのリアルタイムのインタラクションを可能にし、双方が非同期的にメッセージを交換できるようにします。

クライアントは、WebSocket接続を確立する意思を示すWebSocketハンドシェイク要求をサーバーに送信します。

ハンドシェイク要求を受信すると、サーバーはWebSocketハンドシェイク応答を返し、接続が正常に確立されたことを示します。 ハンドシェイク要求を受信すると、サーバーは WebSocket ハンドシェイク応答を返し、接続が正常に確立されたことを示します。 WebSocket 接続を介して送信されるメッセージは、任意のフォーマット (例: テキストまたはバイナリ) であり、非同期に送受信できます。

ウェブトランスポート

Web Transport は、従来の TCP や UDP プロトコルの限界を超えてウェブ通信を強化する追加機能を導入する最先端のプロトコルです。UDP と QUIC を活用して、前の世代の欠点に対処し、よりユーザーフレンドリーで効率的にしています。 ユーザーにとって、これはレイテンシの低減と改善された輻輳制御に変換され、最終的にはより滑らかで反応の良いウェブ体験を提供します。 さらに、ウェブトランスポートはより優れたセキュリティ対策を提供し、TCPに比べてより安全なデータ転送を保証します。これらの進展により、ウェブトランスポートはデータ転送の時間のかかる側面を軽減し、クライアントとサーバーの両方に対して全体的なパフォーマンスを最適化します。

ウェブアプリケーションでウェブトランスポートを使用する基本的な例は次のとおりです:

using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

namespace SocketIO.Demo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // The WebSocket URI
            string uri = "wss://echo.websocket.org";

            // Creating a new WebSocket connection
            using (ClientWebSocket webSocket = new ClientWebSocket())
            {
                await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
                Console.WriteLine("Connected to the server");

                // Sending data over the WebSocket
                byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
                await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
                Console.WriteLine("Data sent to the server");

                // Receiving data from the WebSocket
                byte[] receiveBuffer = new byte[1024];
                WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
                byte[] data = new byte[result.Count];
                Array.Copy(receiveBuffer, data, result.Count);
                Console.WriteLine("Received data: " + BitConverter.ToString(data));
            }
        }
    }
}
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

namespace SocketIO.Demo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // The WebSocket URI
            string uri = "wss://echo.websocket.org";

            // Creating a new WebSocket connection
            using (ClientWebSocket webSocket = new ClientWebSocket())
            {
                await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
                Console.WriteLine("Connected to the server");

                // Sending data over the WebSocket
                byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
                await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
                Console.WriteLine("Data sent to the server");

                // Receiving data from the WebSocket
                byte[] receiveBuffer = new byte[1024];
                WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
                byte[] data = new byte[result.Count];
                Array.Copy(receiveBuffer, data, result.Count);
                Console.WriteLine("Received data: " + BitConverter.ToString(data));
            }
        }
    }
}
$vbLabelText   $csharpLabel

この例では、まず WebSocket URL (wss://echo.websocket.org) を使用して、サーバーへの新しいWebSocket接続を作成します。 次に、接続を介して双方向ストリームを作成し、ストリームを介してデータを送信します ([1, 2, 3, 4])。 最後に、ストリームからデータを読み取り、それをコンソールにログします。

上記のコードの出力

WebSocketエコーサーバーでアプリケーションを実行すると、出力は次のようになります:

Socket io .NET (開発者向けの仕組み): 図 6 - WebSocket URL を使用した WebSocket 接続のコンソール出力。

ウェブトランスポートの利点

  • 現代の代替手段: Web Transport は、従来のウェブ通信プロトコルである TCP や UDP に対する現代の代替手段を提供します。
  • 効率的なデータ転送 : 複数のストリームと高度な機能を活用して、効率的なデータ転送を提供します。
  • 高パフォーマンス : レイテンシが低く、信頼性のあるデータ転送を求められる高パフォーマンスのウェブアプリケーションを構築するのに適しています。
  • マルチプレキシストリーム : マルチプレキシストリームをサポートしており、単一の接続上で複数のデータストリームを同時に送受信できます。
  • 革新: ウェブ開発者が Web Transport を採用し続ける中で、ウェブ通信プロトコルにおけるさらなる革新が期待できます。

IronPDFライブラリの紹介

IronPDF ライブラリの紹介

IronPDFは、C#を使用する開発者向けに特別に設計された包括的な.NET PDFライブラリです。 IronPDFを使用すると、開発者はHTML stringsHTML files、およびURLsからPDFドキュメントを生成できるため、多様なユースケースに非常に適しています。 IronPDF を使用すると、開発者は HTML 文字列HTML ファイル、および URL から PDF ドキュメントを生成でき、多様なユースケースに対応する柔軟性があります。 さらに、IronPDF はヘッダー、フッター、水印の追加など、先進的な PDF 編集機能を提供します。 NuGet パッケージマネージャーを介した C# プロジェクトへのシームレスな統合により、PDF ファイルの取り扱いが簡素化され、開発が効率化され、生産性が向上します。

Socket io .NET (開発者向けの仕組み): 図 7 - IronPDF for .NET: C# PDF ライブラリ

NuGetパッケージマネージャでインストール

Visual Studio に IronPDF をインストールするか、コマンドラインから NuGet パッケージマネージャーを使用します。 - ツール -> NuGet パッケージマネージャ -> パッケージマネージャ コンソール

IronPDFのコード例

Install-Package IronPdf

IronPDFのコード例

IronPDFを使ってバイナリデータをPDFファイルに変換する簡単な例を以下に示します。GeneratePDFメソッドを呼び出し、上記の例と同様にデータをパラメータとして渡します。

using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

namespace SocketIO.Demo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // The WebSocket URI
            string uri = "wss://echo.websocket.org";

            // Creating a new WebSocket connection
            using (ClientWebSocket webSocket = new ClientWebSocket())
            {
                await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
                Console.WriteLine("Connected to the server");

                // Sending data over the WebSocket
                byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
                await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
                Console.WriteLine("Data sent to the server");

                // Receiving data from the WebSocket
                byte[] receiveBuffer = new byte[1024];
                WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
                byte[] data = new byte[result.Count];
                Array.Copy(receiveBuffer, data, result.Count);
                Console.WriteLine("Received data: " + BitConverter.ToString(data));

                // Data to generate in PDF file
                string pdfData = BitConverter.ToString(data);
                PDFGenerator.GeneratePDF(pdfData);
            }
        }
    }
}
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;

namespace SocketIO.Demo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // The WebSocket URI
            string uri = "wss://echo.websocket.org";

            // Creating a new WebSocket connection
            using (ClientWebSocket webSocket = new ClientWebSocket())
            {
                await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
                Console.WriteLine("Connected to the server");

                // Sending data over the WebSocket
                byte[] sendBuffer = new byte[] { 1, 2, 3, 4 };
                await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Binary, true, CancellationToken.None);
                Console.WriteLine("Data sent to the server");

                // Receiving data from the WebSocket
                byte[] receiveBuffer = new byte[1024];
                WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
                byte[] data = new byte[result.Count];
                Array.Copy(receiveBuffer, data, result.Count);
                Console.WriteLine("Received data: " + BitConverter.ToString(data));

                // Data to generate in PDF file
                string pdfData = BitConverter.ToString(data);
                PDFGenerator.GeneratePDF(pdfData);
            }
        }
    }
}
$vbLabelText   $csharpLabel

PDF 生成クラスのコード

using IronPdf;

namespace SocketIO.Demo
{
    public class PDFGenerator
    {
        public static void GeneratePDF(string data)
        {
            IronPdf.License.LicenseKey = "Your-Licence-Key-Here";
            Console.WriteLine("PDF Generating Started...");

            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            Console.WriteLine("PDF Processing ....");

            var pdf = renderer.RenderHtmlAsPdf($"<h1>Received Data</h1><p>{data}</p>");
            string filePath = "Data.pdf";
            pdf.SaveAs(filePath);
            Console.WriteLine($"PDF Generation Completed. File Saved as {filePath}");
        }
    }
}
using IronPdf;

namespace SocketIO.Demo
{
    public class PDFGenerator
    {
        public static void GeneratePDF(string data)
        {
            IronPdf.License.LicenseKey = "Your-Licence-Key-Here";
            Console.WriteLine("PDF Generating Started...");

            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            Console.WriteLine("PDF Processing ....");

            var pdf = renderer.RenderHtmlAsPdf($"<h1>Received Data</h1><p>{data}</p>");
            string filePath = "Data.pdf";
            pdf.SaveAs(filePath);
            Console.WriteLine($"PDF Generation Completed. File Saved as {filePath}");
        }
    }
}
$vbLabelText   $csharpLabel

出力

Socket io .NET (開発者向けの仕組み): 図 8 - Socket.IO とIronPDFを使用したコンソール出力

提供されたコードでは、IronPDF を使用して、WebSocket 接続によって受信した16進数の文字列から PDF ドキュメントを生成します。 GeneratePDF メソッドは、ライセンス キーを使用してIronPDF を初期化し、その ChromePdfRenderer インスタンスを使用して、16 進文字列を HTML コンテンツとして PDF にレンダリングし、RenderHtmlAsPdf メソッドを使用します。 無料のライセンスキーはこちらから取得できます。 この PDF は、SaveAs メソッドを使用して"Data.pdf"としてローカルに保存されます。 ### 生成されたPDFファイル

Socket io .NET (開発者向けの機能): 図9 - IronPDFを使用して生成された出力PDF

Socket io .NET (開発者向けの仕組み): 図 9 - IronPDFを使用して生成された出力 PDF

結論

.NETプロジェクトにSocket.IOやIronPDFなどのツールを統合することで、リアルタイム通信やPDF処理能力を大幅に強化することができます。 Socket.IOはクライアントとサーバー間でシームレスなリアルタイム双方向通信を促進し、IronPDFはPDFドキュメントを作成および操作するための強力な機能を提供します。 Socket.IOはクライアントとサーバー間のシームレスなリアルタイム双方向通信を容易にし、IronPDFは作成操作のための堅牢な機能を提供します。

よくある質問

C#環境でSocket.IOクライアントをセットアップするにはどうすればいいですか?

C#環境でSocket.IOクライアントをセットアップするには、SocketIoClientDotNetパッケージを使用できます。これにより、あなたのC#アプリケーションがSocket.IOサーバーと通信し、リアルタイムで双方向の通信を可能にします。

ウェブアプリケーションでSocket.IOを使用する利点は何ですか?

Socket.IOはリアルタイムの双方向でイベント駆動型の通信を提供し、チャットアプリケーション、コラボレーションプラットフォーム、オンラインゲームなど、ライブアップデートが必要なウェブアプリケーションに最適です。

Socket.IOをVisual Studio 2022で使用できますか?

はい、Socket.IOはVisual Studio 2022でコンソールプロジェクトを作成し、SocketIoClientDotNetなどの必要なパッケージをインストールすることで、C#アプリケーションでリアルタイム通信を可能にします。

IronPDFはSocket.IOを使用したリアルタイムアプリケーションをどのように強化できますか?

IronPDFは、開発者がリアルタイムWebSocketデータからPDFを生成および操作することを可能にすることで、リアルタイムアプリケーションを強化できます。これは動的なデータストリームから構造化されたドキュメントを作成するのに便利です。

C#クライアントをSocket.IOサーバーに接続するプロセスは何ですか?

C#クライアントをSocket.IOサーバーに接続するには、SocketIoClientDotNetパッケージを使用する必要があります。これには、クライアントを設定してイベントをリッスンおよび送信することが含まれ、サーバーとのリアルタイム通信を可能にします。

HTTPロングポーリングはSocket.IOでどのように機能しますか?

HTTPロングポーリングは、Socket.IOが持続的な接続を維持するために使用する方法であり、サーバーが応答するまでリクエストをオープンに保ち、新しいデータが利用可能になったときにすぐに更新を行います。

WebSocketはSocket.IO通信でどのような役割を果たしますか?

WebSocketはSocket.IO通信において重要な役割を果たし、単一のTCP接続を介してフルデュプレックスの通信を可能にし、クライアントとサーバー間の効率的なリアルタイムデータ交換を促進します。

SocketIoClientDotNetパッケージはどのようにインストールしますか?

NuGetパッケージマネージャーを使用して、Visual StudioでSocketIoClientDotNetパッケージをインストールできます。パッケージマネージャーコンソールを開いて次のコマンドを実行します: Install-Package SocketIoClientDotNet

Socket.IOとIronPDFを統合するユースケースは何ですか?

Socket.IOとIronPDFを統合することは、動的データからPDFを生成する必要があるリアルタイムアプリケーションに役立ち、レポート作成ツール、ライブデータ分析、および自動ドキュメント生成システムに適しています。

Socket.IOでWeb Transportを使用する利点は何ですか?

Web Transportは、従来のTCPおよびUDPに比べて遅延と輻輳制御が改善され、多重化されたストリームとセキュリティが強化されており、現代のリアルタイム通信要件に適しています。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me