rch850 の上澄み

技術的な話題とか、雑談とか。タイトルを上澄みに変えました @ 2020/09/02

Server-Sent Events はこんなに簡単

昨晩 twitter API をガシガシ叩いてた勢いで、Server-Sent Events のコードが書きたくなりました。まずは軽くお試し程度に。

クライアント側の HTML, JavaScript。キモとなっているのはこれだけです。

var source = new EventSource('/cgi-bin/sse_source.py');
source.onmessage = function(event) {
    document.getElementById("clock").innerHTML = event.data;
}

そしてサーバ側のコード cgi-bin/sse_source.py はこれだけ。

#!/usr/bin/python

import time

print "Content-Type: text/event-stream"
print
print "data: %s" % time.strftime("%H:%M:%S")
print "retry: 1000"

現在時刻の文字列をクライアントに送信して、1000ミリ秒待ってねとお願いしています。

これら2つのファイルを用意したら、スーパー Python パワーの出番です。html が置いてあるディレクトリで魔法のコマンドを打ちます。

python -m CGIHTTPServer

するとウェブサーバが localhost:8000 で立ちます。カレントディレクトリのファイルはそのまま公開され、cgi-bin にあるファイルは CGI として実行されます。CGIHTTPServer の詳細はライブラリリファレンスを参照してください。

ファイル一式を zip して sse.zip として置いておきました。