Python学習【365日チャレンジ!】164日目のマスターU(@Udemy11)です。
かなり暑くなってきて、いよいよ夏か〜という感じですが、二の腕の虫に刺されたところが痒くてたまりません。
もしかしたら、以前紹介したスケベ虫の仕業かもしれません。
もう1週間ほど経つにも関わらず、とにかくかゆいんですよね。
この時期、虫刺されには注意しましょう!
それでは今日もPythonを学習しましょう!
昨日の復習
昨日は、socketを使ってUDPでサーバーとクライアンのやり取りを学習しました。
TCPを使った通信と違い、基本、接続確認をせず、データを投げっぱなしになるので、信頼性が低くなりますが、リアルタイム性が高まるので、ストリーミング配信などに使われているということでした。
コードも非常にシンプルになるので、必要に応じて、TCPとUDPを使い分けましょう。
詳しい内容については、昨日の記事をごらんください。
今日は、Webサーバーの使い方について学習しましょう。
Webサーバー
Webサーバーは言わずとしれたワールド・ワイド・ウェブ(WWW)で、ブラウザー(SafariやChromeなど)を使って見ることができるページなどを公開しているサーバーです。
Webサーバーとは
Webサーバは、HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、HTMLやオブジェクト(画像など)の表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータを指す。 広義には、クライアントソフトウェアとHTTPによる通信を行うプログラム及びコンピュータ。
引用元: Wikipedia
WebサーバーにHTMLで書かれたWebページ用のデータや素材を置いておくことで、外部からの要求に対して、自分が作成したページを表示することができます。
ようするにホームページのことですね。
今回は、Webサーバーを実装するためのhttp.server
とネットワーク・サーバの実装を簡単にできるsocketserver
をインポートしてコードを書いてみます。
Webサーバーを動かす
Pycharmで作業中のディレクトリ構造を、HTMLにしてWebブラウザーから各ファイルにアクセスできるコードを書いていきます。
import http.server
import socketserver
with socketserver.TCPServer(('127.0.0.1', 8000),
http.server.SimpleHTTPRequestHandler) as httpd:
httpd.serve_forever()
まずhttp.server
とsocketserver
をインポートします。
あとは、4行目から6行目のように、socketserver.TCPServer()
でTCPサーバーを指定して、serve_forever
でWebサーバーが立ち上がった状態になります。
Webブラウザーからアクセス
Webサーバーが立ち上がった状態なので、Webブラウザーから127.0.0.1:8000
にアクセスしてみましょう。
このように、Pycharmで作業しているディレクトリ構造が、ファイル名とファイルへのリンクがはられたHTMLページとして生成されます。
server.pyをクリックすると、書いていたコードが表示されます。
ブラウザーを指定して開く
次に、対話型シェルを使って、サーバーを開いてみます。
ターミナルでPythonを起動して、次のようにコードを実行します。
>>> import webbrowser
>>> webbrowser.open('http://127.0.0.1:8000')
webbrowser
をインポートして、ブラウザーでアドレスを開くコードなので、実行すれば、普段使っているブラウザーで指定したアドレスが開かれます。
また、この状態で、次のコードを続けて実行すれば、ブラウザーをFirefoxに指定して、アドレスを開くことができます。
>>> b = webbrowser.get('firefox')
>>> b.open('http://127.0.0.1:8000')
めっちゃ速い
シンプルなコードの実行だとMacの動きもめちゃくちゃ早いんですよね。
見た目でわかるようにユーザーインターフェイスを表示していれば、わかりやすいことはわかりやすいですが、それだけ実際の要求よりも必要のないコードが増えてくるので、処理に時間がかかるということです。
このあたりがプログラマーがターミナルを使う理由なわけですが、やっぱりターミナルでいろいろと操作できるのは、まじでカッコいいと感じちゃうんですよね。
プログラマーまではいかなくても、ターミナルをある程度使えるようにスキルを上げていこうと思います。
それでは、明日もGood Python!