SlideShare a Scribd company logo
8
Most read
9
Most read
12
Most read
Using or not using
MagicOnion
MagicOnionを使うと場合と使わない場合
自己紹介
- 篠原吾一 (@gsino_)
- C#でゲーム作っています
- 前職ではMagicOnionを利用したスマホゲームを
開発していました
今回のおはなし
MagicOnionとは
=> C#でgRPCを使用するためのフレームワーク
ただしMagicOnionを使用しないでもC#でgRPCの
サーバーを実装することは可能
両者を比較して、特徴を捉えてみます
MagicOnionによるgRPC
- C#(.NET) インターフェースがIDL
- シリアライザはMessagePack for C#
- StreamingHubなどの独自機能
- 引数/戻り値の制限が緩い
(プリミティブ型を使用可能、複数の引数を定義可能)
- サーバー/クライアントともにC#(などの.NET言
語)でないとならない
DEMO
MagicOnionを使用しないgRPC
- .protoファイルがIDL
- シリアライザはProtocolBuffer
- Grpc.Toolsでクライアント/サーバーのベースク
ラスを自動生成
- 言語非依存
DEMO
番外編 HTTP/1アクセスしたい
javascriptなどからはgRPCは使用できないが、代替手段は用意されている。
MagicOnionの場合
=> MagicOnion.HttpGateway
HTTP/1アクセスからgRCPを通さずにメソッドを呼び出し(Unaryのみ)
Swagger出力もしてくれるので、APIの確認に良い
素gRPCの場合
=> gRPC-Web
リバースプロキシを用いてHTTP/1 <=>gRPCを変換
2つ実装があり、片方はServerStreamingに対応
表にしてみた
MagicOnion 素gRPC
IDL C#(.NET) インターフェー
ス
.protoファイル
シリアライザ MessagePack for C# ProtocolBuffer
言語 C# (F#/VB など.NET言語) 大体の言語
クライアント サーバー実装と同一イン
ターフェースのクライアン
ト自動生成(実行時or事前)
サーバー実装とは別インター
フェースのクライアント事前生成
引数/戻り値 複数可、プリミティブ可 複数不可、プリミティブ不可
Http/1アクセス MagicOnion.HttpGateway gRPC-Web
どのように使い分けるべきか
MagicOnionを使いたいケース
サーバー/クライアントがともに.NET
& やり取りの方法が自前でコントロールできる
=> ゲームやアプリのクライアント-サーバー通信
素gRPCを使いたいケース
サーバー/クライアントに.NET以外が含まれる
or システム外部とgRPCでやり取りをしたい
=> 外部から広くアクセスしてもらうシステム
=> すでに実装すべき.protoが規定されている
MagicOnionは使いたいけど、社内のツールの都合で
一部APIは素のgRPCが必要なので無理かな・・・
(´・ω・`)
実は両立できます
一つのgRPCサーバーにMagicOnionと素gRPCを同
居させることは可能
DEMO
まとめ
MagicOnionと素gRPCで得意なところは異なる
うまく使い分けよう
素gRPCを使いたい要件があっても、MagicOnion
と同居できるので、あきらめてはいけない!
ありがとうございました

More Related Content

PDF
MagicOnion~C#でゲームサーバを開発しよう~
PDF
The Usage and Patterns of MagicOnion
PDF
MagicOnion入門
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
いまさら聞けないselectあれこれ
PDF
GoによるWebアプリ開発のキホン
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
PDF
Dockerからcontainerdへの移行
MagicOnion~C#でゲームサーバを開発しよう~
The Usage and Patterns of MagicOnion
MagicOnion入門
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
いまさら聞けないselectあれこれ
GoによるWebアプリ開発のキホン
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Dockerからcontainerdへの移行

What's hot (20)

PDF
ソフトウェアにおける 複雑さとは何なのか?
PPTX
世界一わかりやすいClean Architecture
PDF
DockerとPodmanの比較
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
PDF
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
PPTX
Dockerからcontainerdへの移行
PPTX
Spring Boot ユーザの方のための Quarkus 入門
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PPTX
Goで実装した UPSIDERの決済金額リミット機能
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
PDF
Goでかんたんソースコードの静的解析
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
PPTX
コンテナネットワーキング(CNI)最前線
PDF
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
PDF
これからのネイティブアプリにおけるOpenID Connectの活用
ODP
Guide To AGPL
PDF
いつやるの?Git入門 v1.1.0
PDF
インフラエンジニアってなんでしたっけ(仮)
PPTX
PHP AST 徹底解説
ソフトウェアにおける 複雑さとは何なのか?
世界一わかりやすいClean Architecture
DockerとPodmanの比較
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
Dockerからcontainerdへの移行
Spring Boot ユーザの方のための Quarkus 入門
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Goで実装した UPSIDERの決済金額リミット機能
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Goでかんたんソースコードの静的解析
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
コンテナネットワーキング(CNI)最前線
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
これからのネイティブアプリにおけるOpenID Connectの活用
Guide To AGPL
いつやるの?Git入門 v1.1.0
インフラエンジニアってなんでしたっけ(仮)
PHP AST 徹底解説
Ad

Similar to Using or not using magic onion (20)

PDF
mruby を C# に 組み込んでみる
PPT
Inside mobage platform
KEY
ゆるかわPhp
PDF
20120616i phonedeveloperworkshop
PDF
Grailsのススメ(仮)
PDF
Getting Started GraalVM (再アップロード)
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PDF
JavaScriptでCGを扱う WebGL紹介
ZIP
Ruby Kaigi LT - unshiu
PDF
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PDF
ネットワークコマンド入力に対応したツール事例
PPTX
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
PDF
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
PDF
「宣言的プログラミング」とSDNのひとつの形態
PDF
勉強会20140319 rspec_capybara
PDF
090821 Ruby Sapporo Night Ruby Cocoa
PPTX
C++ AMPを使ってみよう
PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
PPTX
n9te9_introdection_gg-executor(go-graphql).pptx
PPTX
2016/12/17 ASP.NET フロントエンドタスク入門
mruby を C# に 組み込んでみる
Inside mobage platform
ゆるかわPhp
20120616i phonedeveloperworkshop
Grailsのススメ(仮)
Getting Started GraalVM (再アップロード)
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
JavaScriptでCGを扱う WebGL紹介
Ruby Kaigi LT - unshiu
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
ネットワークコマンド入力に対応したツール事例
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
「宣言的プログラミング」とSDNのひとつの形態
勉強会20140319 rspec_capybara
090821 Ruby Sapporo Night Ruby Cocoa
C++ AMPを使ってみよう
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
n9te9_introdection_gg-executor(go-graphql).pptx
2016/12/17 ASP.NET フロントエンドタスク入門
Ad

Using or not using magic onion

Editor's Notes

  • #4: MagicOnionはC#でgRPCを使用するためのフレームワークですが、MagicOnionを使用しないでもC#でgRPCを利用することは可能です。 MagicOnionを使用する場合のgRPCとそうでない場合のgRPCを比較しすることで、MagicOnionの特徴を捉えていきたいと思います。
  • #6: Demo SampleソリューションのMagicOnionフォルダ
  • #8: Demo SampleソリューションのMagicOnionフォルダ
  • #10: MagicOnionはC#でgRPCを使用するためのフレームワークですが、MagicOnionを使用しないでもC#でgRPCを利用することは可能です。 MagicOnionを使用する場合のgRPCとそうでない場合のgRPCを比較しすることで、MagicOnionの特徴を捉えていきたいと思います。
  • #14: Demo SampleソリューションのMixフォルダ