Python Webサーバー

Python学習【365日チャレンジ!】164日目のマスターU(@Udemy11)です。

かなり暑くなってきて、いよいよ夏か〜という感じですが、二の腕の虫に刺されたところが痒くてたまりません。

虫刺され スケベ虫

もしかしたら、以前紹介したスケベ虫の仕業かもしれません。

もう1週間ほど経つにも関わらず、とにかくかゆいんですよね。

この時期、虫刺されには注意しましょう!

それでは今日もPythonを学習しましょう!

昨日の復習

昨日は、socketを使ってUDPでサーバーとクライアンのやり取りを学習しました。

TCPを使った通信と違い、基本、接続確認をせず、データを投げっぱなしになるので、信頼性が低くなりますが、リアルタイム性が高まるので、ストリーミング配信などに使われているということでした。

コードも非常にシンプルになるので、必要に応じて、TCPとUDPを使い分けましょう。

詳しい内容については、昨日の記事をごらんください。

今日は、Webサーバーの使い方について学習しましょう。

Webサーバー

Webサーバーは言わずとしれたワールド・ワイド・ウェブ(WWW)で、ブラウザー(SafariやChromeなど)を使って見ることができるページなどを公開しているサーバーです。

Webサーバーとは

Webサーバは、HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、HTMLやオブジェクト(画像など)の表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータを指す。 広義には、クライアントソフトウェアとHTTPによる通信を行うプログラム及びコンピュータ。

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.serversocketserverをインポートします。

あとは、4行目から6行目のように、socketserver.TCPServer()でTCPサーバーを指定して、serve_foreverでWebサーバーが立ち上がった状態になります。

Webブラウザーからアクセス

Webサーバーが立ち上がった状態なので、Webブラウザーから127.0.0.1:8000にアクセスしてみましょう。

Python Webサーバー

このように、Pycharmで作業しているディレクトリ構造が、ファイル名とファイルへのリンクがはられたHTMLページとして生成されます。

server.pyをクリックすると、書いていたコードが表示されます。

Python Webサーバー

ブラウザーを指定して開く

次に、対話型シェルを使って、サーバーを開いてみます。

ターミナルで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!