質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

ネットワークスペシャリスト

ネットワークスペシャリスト試験 (NW)は、IPA 独立行政法人 情報処理推進機構の実施している国家資格です。

Q&A

解決済

3回答

5941閲覧

ホスト サーバー クライアント 役割を再確認したい

earnest_gay

総合スコア615

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

ネットワークスペシャリスト

ネットワークスペシャリスト試験 (NW)は、IPA 独立行政法人 情報処理推進機構の実施している国家資格です。

0グッド

0クリップ

投稿2017/09/03 17:22

編集2017/09/03 19:16

Unityでゲーム制作しています。
同期型について学んでいる最中です。

UNETを使えば、そこまで知識がなくても同期させることはできるとのことで下記のようなことはできました。

端末A:プレイヤー1
端末B:プレイヤー2

端末Aでプレイヤー1を動かすと端末Bでもプレイヤー1が動く。
この仕組みを学んで、RPGゲームなどのバトルである、プレイヤー1のHPが減ったら端末Aにも端末Bにも反映させる応用的なことはできました。

おさらいでもあるのですが、掲題にもある「ホスト サーバー クライアント」について細かく説明できるほど理解していないので再確認です。
とくにホストがいまいちしっくり理解できていません。
説明できるほど理解できていないかもしれませんが、間違いがあれば教えてください。

・サーバーとは
クライアントからのリクエストを受け取り、必要に応じてDBなどと連動してフロントエンドに渡すための計算(?)を行う層を差している。
システムともいう。

・クライアントとは
WEBでいうところのフロントエンドになる。サーバー(バックエンド)から何かしらを受け取り画面へ表示させる層を差している。
また、用語として端末そのものを表すこともある。

・ホストとは
サーバーとクライアントをまとめたものである。
ぱっとイメージしやすいのは、apacheなどをパッケージ化してローカル開発環境として提供されているXAMPPやMAMPが該当する。
この例でいうと、ローカル開発環境のパッケージをインストールしているPCがクライアントとなり、同時に仮想サーバーとしての役割も提供しているため、ローカル開発環境をインストールしているPCは「ホスト」であると言える。

文脈として「ホストする」と使われる場合がある。

何に?
クライアントに。

何を?
サーバーを。

正:サーバーをクライアントにホストする。

、、、書いてて思うのが、やはりホストがしっくり理解できていないです。

http://wa3.i-3-i.info/word1336.html
上記記事ではホストについて深く考えてはいけないと言われているのですが、ちゃんと理解していないとUnityで同期型のゲーム制作するときの設計ができないと思うのです。

なんとなくやっていってなんとなく直して見たら動いたってやり方もありかもしれませんが、個人的にはできるところはしっかり設計してウォーターフォールでやっていきたいのです。

多分これを理解しないと
UnityのUNETにおける[ServerCallback][ClientCallBack]の使い所がわからないと思うのです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

クライアント、サーバー、ホストについて、説明します。

#クライアント

クライアントは、英語のclientを日本語に訳したものです。

役割をさした言葉で、機能やサービスを利用する方がクライアントと呼ばれます。

「機能やサービスを利用する」とは?と思うかもしれませんが、
通信の要求を送信したマシンがクライアントと呼ばれると考えて、概ね問題ないと思います。

Webでは、ブラウザやスマホアプリから通信の要求が送信される状況がほとんどです。
だから、Webでクライアントと呼ぶと、ブラウザやスマホアプリをさしていることが多いというのはあります。

WEBでいうところのフロントエンドになる。サーバー(バックエンド)から何かしらを受け取り画面へ表示させる層を差している。また、用語として端末そのものを表すこともある。

まず、クライアントは「層」ではなくて、「役割」です。
あと、端末とクライアントは別の言葉ですが、物理的には同じものをさしていることも多々ありますね。

#サーバー

サーバーは、英語のserverを日本語に訳したものです。

役割をさした言葉で、機能やサービスを提供する方がサーバーと呼ばれます。

Webサーバー、DBサーバー、APサーバーとか、いろんなサーバーの名前を聞くかもしれないですが、
「Webサービスを提供するサーバー」「データベースサービスを提供するサーバー」
「アプリケーションサービスを提供するサーバー」などのように言い換えてもだいたい合ってます。

クライアントからのリクエストを受け取り、必要に応じてDBなどと連動してフロントエンドに渡すための計算(?)を行う層を差している。
システムともいう。

「フロントエンドに渡すため」ではなくて、「クライアントに渡すため」ですかね。
あと、こちらも「層」ではなくて「役割」の用語です。

#ホスト

もともとは「ホストコンピュータ」という言葉があって、その言葉が省略されて「ホスト」になっています。
英語のhostには動詞も名詞もあって、ややこしいんだろうと思います。

まあでも、最近のシステムを構築するのに、
わざわざホストって言葉を使わなくても説明できるように思いますし、
むしろ、ホストって言葉を使った方がややこしくなると思いますので、
ホストって言葉は使わずに説明した方がいいと思いますよ。

投稿2017/09/03 18:48

mtb_beta

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2017/09/03 19:05 編集

回答ありがとうございます。 最近まで言っていた現場でやたらホストホストって言葉が飛び交っていたので、これはしっかり理解しとかないとまずいなって思って質問させてもらったのもあります。 「これはホスト側の処理だから〜〜〜」とか結構飛び交う話が多かったです。 何かの本で読んだのですが、昔は大型コンピュータがあり、その大型コンピューターは1台数百万円もしたそうでそんなに多く導入できない上に、1人でしか使えないという今では考えられない時代があったみたいです。 しかし、それから技術が発展して大型コンピュータからコンパクト化され、今ではノートPCというものが個人でも容易に購入できる時代になったそうです。 その過程の中でサーバーとコンピューターが同居できるようにコンパクトに設計開発されたのがノートPCだそうです。 歴史を知っているとなるほどとは思うものの、仰られているホストコンピューターというのはこの大型コンピューターのことですね。 経緯は分かっていても、技術書で出てくるホストに関する内容理解しようとするとなかなかとっつきにくいです。。。
usamino

2019/04/04 12:18

勉強させて頂きました。 とてもわかりやすい。
guest

0

ベストアンサー

元々の意味や歴史的な経緯、インフラ業界とかアプリ開発業界とかそれぞれの業界ごとの言い回しなど、さまざまな要因がからまっています。同じ用語を業界ごとに微妙に違う意味で使ったりするので、言葉だけとりあげて理解しようとしても混乱してしまうのではないかと思います。たとえば、レストランの話をしていて「サーブする」と言ったら、料理を出したりすることですし、テニスの話をしていて「サーブする」と言ったらあるセッションを開始するためにボールを放つことです。参考にされたページに「自信満々に違いを説明してくれる人もいますが、自信満々な人たち同士でも説明が違ったりする」と書いてありましたが、業界や文脈が違えば意味が違うので、当然といえば当然です。ですので、「気にしない」と割り切ってしまうのも一つの道です。あとは様々な文脈での使いかたをあれこれ知って、最初はぼんやりとであっても、文脈ごとの意味を理解していくのも一つの道です。

まあ、そんなこんなで、一つの捉えかたの紹介ということで私なりの見解を書きます。

まず、新たな用語を登場させてアレですが、サーバ/クライアントは対の概念ですが、ホストに対となる概念はゲストです。土台となるイメージで言うと、

  • サーバ/クライアントは、ある特定のこまごまとしたそれぞれのサービスにおける相対的な役割
  • ホスト/ゲストは、個別のサービスごとにちまちまではなく鷹揚に全体をまるっと提供する側と使う側の絶対的な関係

てな感じでしょうか。

私の語感では、ホストには「うむ、苦しゅうない。まあ、好きに使いたまえ」という鷹揚なイメージがつきまといます。大昔は性能も値段も超絶ハイスペック (今のスマホぐらいの性能) なコンピュータを、ちょっとしたスペックの端末を介してみんなで使っていたわけですが、その中心となるコンピュータが「ホスト」ですね。
今では、仮想マシンの世界で、「ホスト OS」「ゲスト OS」と言ったりしますが、実体のあるハードウェアを持つ「ホスト OS」が「君たちが棲める環境を用意してあげたから、好きに使いなさい」と提供した環境の上で、「では、ありがたく」と「ゲスト OS」が稼働します。
そう、ホストは機能を提供するんじゃなくて、リソースをまるっと提供するって感じです。

対して、サーバ/クライアントは、何か便利な機能を、使いたいときごとに個別に、やってもらう関係です。「これをやってほしいときは言ってね」と待っているサーバに、使いたいと思ったそのときにクライアントが「あ、今、これやって」とリクエストを出し、それに対しサーバがサービスをサーブする、という構図です。そう、サーバ/クライアントの構図には常にリクエスト/レスポンスという要求/応答がつきまといます。「なんでも好きに使いたまえ」という鷹揚さはありません。サーバ/クライアントは「機能」のやりとりで、サーバが持っているモノはクライアントに渡さず、サーバが持っているモノで実現できるサービスをやってあげる感じで、ホストはモノをゲストに使わせる感じです。
なので、コンピュータ間では、あるサービスではサーバだったコンピュータが、別のサービスではクライアントとなったりします。

元々、サーバ/クライアントの関係は、即時的、即応的、一時的、都度発生、のものなんですが、サービスによっては役割が固定化します。そのほうが便利だから。不特定多数の人にサービスを提供する場合、ハイスペックで専属でないとリクエストをさばききれない可能性があります。そんなんで、そういう環境では、サーバに徹するマシンが必要になり、そういうマシンを「サーバ機」と呼んだりします。データセンターにサーバを置く、とか言うときの「サーバ」がこれですね。

「フロントエンド」「バックエンド」というのは、レストランのフロアと厨房みたいなものですね。フロントエンドにパワーがあると、ユーザの情報を大量に抱えられるようになるので、バックエンドが必要な情報のサーバになりえます。たとえば、料理を作るというサービスにおいては厨房がサーバですが、お客様の嗜好やその日の雰囲気、体調などを考慮して料理を出したい厨房がそれらの情報をフロアに聞くとしたら、「顧客情報」に関してはフロアがサーバです。

とりあえず、この辺で。

投稿2017/09/03 21:57

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2017/09/03 22:58

回答ありがとうございます。 比喩はとてもわかりやすいです。 確かに、同じ言葉でも環境などが違うと意味も若干異なることはありますね。 インフラ側の知識ももう少し育ってくると有機的に解る日がくるかもしれません。 今はあまり深く考えず、知見を広める方向でいきたいと思います。
unau

2017/09/03 23:28

私もぼんやりと理解していたものが、書いているうちに整理されました。よい機会をいただきました。 いくつか蛇足を。 住まいでいうと、ホストって大家さん、家主さんって感じですね。借りる人がゲスト。アパートだとゲストがたくさん住めます。で、水まわりで困ったらクラシアン呼ぼうとか、電話引きたいから業者に頼もうとかいうのがそれぞれのサーバの利用ですね。もしかしたらアパートの住人 (別のゲスト) で水まわりを直せる人がいたら、その人が (水まわりの修理に関しては) サーバになるかもしれません。お礼に、その人がパソコンで困ったときに対応してあげたとしたら、自分が (パソコンのトラブル解決についての) サーバです。 あと、昔は厨房の力が圧倒的に強くて、フロアは短期アルバイトでも済むようなおまけ (WEB 黎明期)、容姿とかしゃべりのうまさとか小手先の部分で秀でている (JavaScript の台頭) とレストランとして目立ったわけですが、最近は経験豊富も技術も高いスーパー接客員がなんでもこなして、厨房がその指示で料理を作る (SPA とか) みたいなレストランも増えましたね。ブラウザがストレージ持てるようになったし、計算リソースも豊富になったし、スマホになって位置情報とか行動特性とか、パーソナル情報を沢山かかえるようになりましたからね。
guest

0

結論から言うと、「ホスト=接続される側」と思っていいです。
ゲームの場合は「ホスト=ゲームマスター」と思ってもいいかもしれません。


まず分かりやすく、P2P通信の場合で説明します。(例:携帯ゲーム機でのモンハン)

端末A:プレイヤー1:ホスト
端末B:プレイヤー2:クライアント
端末C:プレイヤー3:クライアント

上記のような3名で接続しようとした時、
端末A-端末B、端末A-端末Cと接続されていますが、端末B-端末Cは接続されません。

プレイヤー2がプレイヤー3に攻撃しダメージを与えた場合は
端末B(攻撃)→端末A(Bが攻撃したと受信、Cが攻撃を受けたと送信)→端末C(被ダメージ)
のような流れで通信が行われます。
なので「接待側の主人=ホスト」です。

ちなみに「勝敗結果をサーバー(DB)に保存する」ような場合は、
上記ホスト-クライアント接続とは別途サーバーアクセスが行われます。


いわゆるMMOなどの「ネットゲーム」の場合でも、原理は一緒です。

端末A:サーバー:ホスト
端末B:プレイヤー1:クライアント
端末C:プレイヤー2:クライアント

クライアントは皆ホスト(この場合はサーバーに当たる)に接続します。(クライアント間の接続は無い)
他の処理はP2Pの時とほぼ同じです。

「サーバーをクライアントにホストする」という言葉は(確証は無いですが)
「サーバーをホストとして、クライアントから接続する(またはそう出来るように準備する)」みたいな意味かなと思います。


「通常のネトゲは皆サーバーをホストにしている為、サーバー=ホストと思われがち(P2Pの場合は違うよ)」
「実際はサーバーも端末も、ホストにもクライアントにもなれる(サーバーAからサーバーBに接続したらBがホスト、Aがクライアントになるよ)」
「UnityのNetWork系では『Server=ホストのこと』と思ってよい(理由は不明)」

詳細を取っ払ったイメージだけの説明になりますのでご参考程度に。

投稿2017/09/04 01:27

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問