サーバーについて学習するためにチャットアプリ(androidアプリ)を作成しようとしています。
いろいろ調べた結果、サーバーサイドはnode.jsで書き、クライアント側はkotlinで書こうと思います。
そこでいくつか疑問点が出たので質問します。
- サーバールームの画像を見るとPCの本体だけが並べられているのですが、あれは一度モニターにつないだ後にサーバーを起動してもう一度モニターを外してから24時間起動した状態いるのでしょうか?
- node.jsでサーバーを起動したあとに、実際に外部から接続するにはレンタルサーバーを借りないといけないのでしょうか?
- サーバーサイドもkotlinで書いたほうが良いのでしょうか?
サーバーについてはほとんど知識がないので詳しく教えていただければ嬉しいです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
サービス提供者がサーバー、サービスを受ける側がクライアントです。
例えば牛丼屋に入って注文して金払ったら牛丼が出てくる流れがありますが、
この時牛丼屋がサーバ、利用者がクライアントです。
そして質問文の文脈的に
インターネット上に存在するHTTPサーバの事を指しています。
……が、インターネットとはなんぞや?Webとはなんぞや?に関する知識がまだ不足してそうですね。
PCをLANケーブルで繋げばLANケーブル越しに0と1の羅列を送受信することが出来ます。
各々が適当に文字列を発射しても対話は成立しないので、
偉い人がルールを作って管理してるわけです。
その根本的な話から、HTTPサーバとはなんぞやみたいな所まで、
3分間Networkingを読めばなんとなくで全てわかるので一度全部に目を通してきてください。
一見面倒に思えますが、これらを読んでおくのはこれからの人生でかなり重要になると思います。
ここからサーバーになる為の条件を解説していきます。
Webサーバというのは
- マシンのTCP80/443番等のポートで待ち受ける事
- HTTPリクエストを受信したら、HTTPレスポンスを返す事(Webの仕様書であるRFCで定義されている)
こういう機能を持つアプリケーションを稼働させているマシンを指します。
別にデータセンターのサーバールームの中で無かろうが、ディスプレイがひっついていようがいまいが、
HTTPリクエストを受信して、HTTPレスポンスを返す機能を持つアプリケーションを稼働させれば
それは全てHTTPサーバ、Webサーバと名乗って構いません。
もし貴方がWindowsやMacOSのマシンを使ってteratailにアクセスしているのであれば、
すぐにでもWebサーバに変身させる事が可能です。
2: node.jsでサーバーを起動したあとに、実際に外部から接続するにはレンタルサーバーを借りないといけないのでしょうか?
必ずしもしなければならないのか?という意味で言えば、NOです。
自宅で光回線を引いているのなら、ルーターの設定を変更して外部からの通信がマシンにアクセス出来るようにして、
そこでHTTPサーバを構築すれば実現出来ます。
1990〜2000年頃はこういう手法でWebサーバを立ち上げる人もそれなりにいました。
しかし、今日では月1000円弱でインターネット上にぶら下がってるPCをレンタル出来るようなサービスがいくつもあり
そのマシンでWebサーバを稼働させればすぐに通信出来ますからね。
サービス作って一山当ててやろうとする企業以外は皆そういうサービス使ってますね。
例: ConoHaのVPS
まぁ、自宅内でサーバサイドを作り込んで、
完成して公開する時にこういうVPSサービスを借りれば良いでしょう。
3: サーバーサイドもkotlinで書いたほうが良いのでしょうか?
Node.jsでもKotlinでも、C++でもGo言語でも……
HTTPリクエストを受け取って様々な処理を施して、HTTPレスポンスを返すプログラミング言語は腐る程存在します。
なので自分が好きな言語、自分が得意な言語、お目当てのライブラリやモジュールがあって楽に実現できそうな言語と色々選択する軸が存在します。
質問者さんの場合、Androidアプリを作りたいということなのでKotlinはどの道扱う必要があると思うので、
0からNode.jsを覚え直して使うより、なれてきたKotlinをそのまま使うよというのはアリよりのアリって感じになります。
逆にNode.jsでAndroidアプリを作ってしまう仕組みもありますから、
Kotlin捨てちゃってNode.jsで全部作ってみるなんて案もあります。
投稿2022/06/03 10:09
総合スコア21158
0
他の方が回答されていますので、補足的に回答してみます。
サーバールームの画像を見るとPCの本体だけが並べられているのですが、あれは一度モニターにつないだ後にサーバーを起動してもう一度モニターを外してから24時間起動した状態いるのでしょうか?
http://pinnaclebuspro.com/home/server-room/
http://pinnaclebuspro.com/wp-content/uploads/2018/01/server-room.jpg
イメージがあっているかどうかわからないですが、
仕事でデータセンターなどに行くと、
ラックにサーバーが搭載されているのを使ったりします。
https://ja.wikipedia.org/wiki/ラックマウント型サーバ
同じような形状でディスプレイ(モニター)(コンソール)もラックから引き出して起こして使うようなものがあります。
https://jpn.nec.com/pcserver/option/rackmount/index.html
このコンソールは、スイッチで切り替えて、ラック内の複数のサーバーを操作できるようになっています。
このコンソールは外されることなく、常に接続された状態になっています。
このコンソールは普段はラックの中に収まっています。
(正面から見るとラック1段分のサーバーと同じ形状ですので、本体だけが並んでいるように見えるかもしれません)
ハードウェアを導入する時やハードウェアをメンテナンスする時に引き出して使ったりします。
アプリケーションを開発する人が普段サーバーを操作する際はリモートだったりしますので、あまりこのコンソールを使うことはありません。
ですので、「モニターを外して」というのはちょっと違うのかなと思いました。
(全てのラックマウント型サーバが当てはまるかどうか、ちょっとわかりません・・)
(「サーバールーム」の認識が違っていたらごめんなさい・・)
コメントありがとうございます。
コメントに対する追記です。
スイッチを入れた段階で自動的にアプリが起動してサーバーが立ち上がるという認識で正しいでしょうか?
質問欄の「モニターを外して」の部分についてだけ回答したつもりでしたが、
この回答に対するコメントで良いのでしょうか。。
そういう仕組みにしておくとそのような動きになると思います、
という回答になるのでしょうか。。
Webアプリを動かすための役割を提供するサービスなどを使うと
あまりこの辺りを気にすることはないのかなと思います。
ブラウザーから操作できるような管理ページが提供されていたりして、
ハードウェアの電源ボタンを押して電源を入れる、
なんていうことがなさそうです。。
他の方の回答が適切なのかもしれませんね。
質問者様の聞きたいことをよく把握せず、
見当違いな回答をしてしまったかもしれません。
逆に混乱させてしまったかもしれません。
ごめんなさい。
投稿2022/06/03 10:33
編集2022/06/03 22:00退会済みユーザー
総合スコア0
0
サーバというものを勘違いしていると思います。
サーバールームの画像を見るとPCの本体だけが並べられているのですが、あれは一度モニターにつないだ後にサーバーを起動してもう一度モニターを外してから24時間起動した状態いるのでしょうか?
サーバはPC(Personal Computer)とは言わないと思いますが、そこはおいておいて、OSのインストールにも、OSの起動にもモニタは必須ではありません。
OSのインストールのときだけモニタはつなぐかもしれませんが、電源ON/OFFのときには基本的にはつながないでしょう。
ここでの「サーバ」は、サービスアプリケーションを動かすためのシステム(OSとか)が動いているハードウェアとしてのサーバを指していますね。
node.jsでサーバーを起動したあとに、実際に外部から接続するにはレンタルサーバーを借りないといけないのでしょうか?
ここで言う、「サーバ」というのは、クライアントサーバシステムのサーバアプリケーションのことでしょう。
ここでのサーバは、サービスを提供しているアプリケーションなので、ハードウェアとしての「サーバ」で動作している必要はありません。
node.jsで作ったサーバアプリケーションは、どこで動かしていても「サーバ」となります。
自分のPCでもOKです。
サーバーサイドもkotlinで書いたほうが良いのでしょうか?
そのほうが良いということはありません。適した言語で書けばいいのです。
適しているというのは、サーバの環境だったり、開発者のスキルだったりのいろいろな要因で決まるものです。
回答を書いていると、「サーバーについて学習する」の目的がよくわかりません。
どちらの「サーバ」を学習したいのでしょう?
投稿2022/06/03 09:26
総合スコア12765
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/03 23:35