今回は, どちらもリアルタイムwebを手軽にシステムに追加できるASP.NETのSignalRと, node.jsのSocket.ioの比較を行ってみます. どちらかを使う上での参考にしてみてください.
そもそもリアルタイムWebとは
「インターネット上のユーザーの書き込みや動向を、即時かつ大規模に他のユーザーと共有する仕組みの総称」
と定義されているようです.(Wikipedia曰く)
TwitterやFacebookみたいなSNSは, リアルタイムWebっぽいですね
技術的には, どんな感じなのか
リアルタイムWebを技術の面から見ていくと, サーバとクライアントがリアルタイムにやり取りするために双方向に通信を行う.
WebSocketなどを使っている場合が最近では, 多いようです.
それぞれの機能・特徴
SignalR
- マルチスレッド
- 非同期処理
- RPC
といったライブラリであり, 対応する通信方式は,
- ASP.NEt上で動作
- WebSocket
- ServerSentEvents
- Forever Frame
- Long-polling
対応するクライアントは,
- .NET Framework4.0 ~ 4.5
- JavaScript
- WinRT
- Xamarin
- Objective-c(非公式)
です.
Socket.io
- node.js上で動作
- ノンブロッキングI/O
- シングルスレッド
- イベントループ処理
対応している通信方式は,
- WebSocket
- Adobe Flash Socket
- Ajax Long-polling
- Ajax Multipart-streaming
- Forever IFrame
- Jsonp polling
対応しているクライアントは,
- JavaScript
- Java(Android含)
- .NET Framework
- Objective-c
- PHP
- etc...
双方を簡単に比較
これだけの情報を見ると, SignalRは, ほぼ完全に.NET + αなものであり, Socket.ioは, 幅広い環境を対象に使用できる門戸の広いものといった印象を受けます.
現状, .NETは, .NET単体でほぼできないことはないくらいたくさんのことができるため, 現状そのようになっているように感じられます.
また, これらを使用する環境をそれぞれ用意する場合, 両者とも, WindowsAzureを使用して簡単に構築が行えるようになっています. そのため, 必要に応じてAzure上に両方の環境を構築し, 使用するアプリケーションによって切り替えるといったことが可能です.
これ以外にも, スケールアウトの観点など, さまざまな要素で両者には, 一長一短あるため, 使用する環境やアプリケーションによって, 適切なものを選択して構築してみてください.