プラットフォーム
- @grpc/grpc-js:
@grpc/grpc-js
は、Node.js環境向けに設計されており、サーバーおよびクライアントの両方をサポートします。ネイティブモジュールに依存しないため、クロスプラットフォームでの使用が可能です。 - @improbable-eng/grpc-web:
@improbable-eng/grpc-web
は、WebブラウザからgRPCサービスにアクセスするためのライブラリです。双方向ストリーミングをサポートしており、リアルタイムアプリケーションに適しています。 - grpc-web:
grpc-web
は、gRPCサービスとWebクライアント間の通信を可能にするライブラリです。ブラウザからgRPCサーバーにリクエストを送信するシンプルな機能を提供します。
ストリーミングサポート
- @grpc/grpc-js:
@grpc/grpc-js
は、gRPCの全てのストリーミング機能(単方向、双方向)をサポートしています。これにより、複雑なデータ交換やリアルタイム通信が可能です。 - @improbable-eng/grpc-web:
@improbable-eng/grpc-web
は、双方向ストリーミングをサポートしており、リアルタイムデータ交換が可能です。特にインタラクティブなアプリケーションに適しています。 - grpc-web:
grpc-web
は、単方向のストリーミングをサポートしていますが、双方向ストリーミングはサポートしていません。シンプルなデータ交換には適していますが、複雑なストリーミングには制限があります。
依存関係
- @grpc/grpc-js:
@grpc/grpc-js
は、純粋なJavaScriptで実装されており、ネイティブモジュールに依存しません。これにより、サーバーレス環境や制限された環境でも使用できます。 - @improbable-eng/grpc-web:
@improbable-eng/grpc-web
は、gRPC-Webプロトコルを実装しており、ブラウザ環境での使用に最適化されています。特別な依存関係はありませんが、gRPCサーバーが必要です。 - grpc-web:
grpc-web
は、gRPC-Webプロトコルを実装しており、ブラウザからgRPCサーバーへのシンプルな通信を提供します。依存関係は最小限です。
コード例
- @grpc/grpc-js:
@grpc/grpc-js
を使用したgRPCサーバーの例const grpc = require('@grpc/grpc-js'); const protoLoader = require('@grpc/proto-loader'); // プロトコルバッファファイルの読み込み const packageDefinition = protoLoader.loadSync('service.proto'); const proto = grpc.loadPackageDefinition(packageDefinition); // サーバーの実装 const server = new grpc.Server(); server.addService(proto.MyService.service, { myMethod: (call, callback) => { callback(null, { message: 'Hello from gRPC server!' }); }, }); // サーバーの起動 server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => { server.start(); console.log('gRPC server is running on port 50051'); });
- @improbable-eng/grpc-web:
@improbable-eng/grpc-web
を使用したgRPC-Webクライアントの例import { grpc } from '@improbable-eng/grpc-web'; import { MyService } from './generated/service_pb'; // gRPC-Webクライアントの設定 const client = new MyService('https://my-grpc-server.com'); // 単方向リクエストの送信 client.myMethod({ message: 'Hello from gRPC-Web client!' }, (error, response) => { if (error) { console.error('Error:', error); } else { console.log('Response:', response); } }); // 双方向ストリーミングの例 const stream = client.myStreamingMethod(); stream.on('data', (data) => { console.log('Streamed data:', data); }); stream.on('error', (error) => { console.error('Stream error:', error); }); stream.on('end', () => { console.log('Stream ended'); });
- grpc-web:
grpc-web
を使用したgRPC-Webクライアントの例import { grpc } from '@improbable-eng/grpc-web'; import { MyService } from './generated/service_pb'; // gRPC-Webクライアントの設定 const client = new MyService('https://my-grpc-server.com'); // 単方向リクエストの送信 client.myMethod({ message: 'Hello from gRPC-Web client!' }, (error, response) => { if (error) { console.error('Error:', error); } else { console.log('Response:', response); } }); // ストリーミングの例 const stream = client.myStreamingMethod(); stream.on('data', (data) => { console.log('Streamed data:', data); }); stream.on('error', (error) => { console.error('Stream error:', error); }); stream.on('end', () => { console.log('Stream ended'); });