More Related Content Similar to HttpとTelnetをつなぐ何か Similar to HttpとTelnetをつなぐ何か (20) HttpとTelnetをつなぐ何か2. おまえだれよ
山田茂樹
● ネットワーク系です。
● とあるSIに派遣されている。
● ルータやスイッチを設定したり、テストしたり、導入したり。
● NWer向けtool(TTLGen, RouTexDF)をpythonで作ってます。
3. このセッションについて
● websocket に関する内容です。
利用事例 + pywebsocket の使い方のさわり をご紹介します。
● non programer ~ beginner 向けです。
このセッションの目標
● 「websocket 使うの簡単そう!」
● 「websocket 面白そう!」
って思ってもらう事です。
5. 予備知識1:websocketについて
client web server
browser websocket
・httpでハンドシェイク
・コネクションを確立
・明示的に切断するまでコネクションは張りっぱなし
clientはいつでもデータを送れる
serverはいつでもデータを送れる
6. 予備知識2:pywebsocketについて
client
browser web server
html/JS
pywebsocket
AP server とか
ブラウザに送るhtmlには Handler
必要なら DB とか
データを受けたり送ったり
するJSが含まれます。
受けたデータをどうするか?
どういうデータを返すか?
を書きます。
7. 予備知識3:web2telについて
client
browser web server
html/JS
pywebsocket
この部分はpywebsocketに web2tel TELNET server
同梱されているexampleに入って
いたものをそのまま流用しました。
ブラウザからのデータをもとに
TELNETするためのHandlerを
つくりました。
https://gist.github.com/1020399
9. web2telの挙動
Client (web browser)
websocket
pywebsocket (stand alone)
web2tel
web_socket_transfer_data
TelnetClass ReaderClass
connect send
Telnet
Telnet Server
11. どういう方式で実現するか?
client
browser Telnet server
telnet
↑は動やったら良いかわからなかったので、↓で
client
http telnet
browser proxy Telnet server
12. 失敗。。
client
browser web server
CGI
web2tel Telnet server
DB
13. 挫折。。
client
browser http.server
telnetlib Telnet server
・Clientの識別はcookieで
・Clientからの文字列はURLのクエリで
・TelnetインスタンスはDictに
・Telnetインスタンスの識別はclientのcookieで
16. pywebsocketの使い方のさわり(2)
pywebsocketとのデータの受け方/渡し方
def web_socket_transfer_data(request):
while True:
data = request.ws_stream.receive_message() #受ける
request.ws_stream.send_message(reply_data) #渡す
詳しいことは、__init__.py standalone.py に書いてあります。
17. websocket API のさわり
接続と受信
function connect() {
socket = new WebSocket('ws://example.com:/sample');
socket.onopen = function () { #接続
~~~~~~;
};
socket.onmessage = function (event) { #受信
~~~~~~;
};
送信
function send() {
socket.send('mojiretu');
}
18. handlerとhtmlを書いたら
● ファイル名を”hogehoge_wsh.py” にして適当なディレクトリに置いて、
● 待ちうけポート、ドキュメントルート、handlerのディレクトリ等を指定して、
● pywebsocketを起動する
たとえばこんな感じ
python C:pythonmod_pywebsocketstandalone.py -d C:pythonmod_pywebsocketexample
詳しいことは、__init__.py standalone.py に書いてあります。