SlideShare a Scribd company logo
1 of 25
Download to read offline
Http と Telnet をつなぐ何か


      2011/08/27 PyCon JP
        Shigeki Yamada
おまえだれよ


    山田茂樹



●   ネットワーク系です。
●   とあるSIに派遣されている。
●   ルータやスイッチを設定したり、テストしたり、導入したり。



●   NWer向けtool(TTLGen, RouTexDF)をpythonで作ってます。
このセッションについて


●   websocket に関する内容です。

    利用事例 + pywebsocket の使い方のさわり をご紹介します。
●   non programer ~ beginner 向けです。



    このセッションの目標
●   「websocket 使うの簡単そう!」
●   「websocket 面白そう!」

    って思ってもらう事です。
予備知識
予備知識1:websocketについて


    client                        web server

   browser                        websocket


         ・httpでハンドシェイク
         ・コネクションを確立
         ・明示的に切断するまでコネクションは張りっぱなし



             clientはいつでもデータを送れる



             serverはいつでもデータを送れる
予備知識2:pywebsocketについて

   client

  browser                  web server
        html/JS

                           pywebsocket


                                                AP server とか
ブラウザに送るhtmlには               Handler
                                         必要なら     DB とか
データを受けたり送ったり
するJSが含まれます。


                  受けたデータをどうするか?
                  どういうデータを返すか?
                  を書きます。
予備知識3:web2telについて

   client

  browser               web server
        html/JS

                        pywebsocket



この部分はpywebsocketに        web2tel                        TELNET server
同梱されているexampleに入って
いたものをそのまま流用しました。



                  ブラウザからのデータをもとに
                  TELNETするためのHandlerを
                  つくりました。
                                     https://gist.github.com/1020399
デモ
web2telの挙動

     Client (web browser)

                           websocket

 pywebsocket (stand alone)


                                                         web2tel
 web_socket_transfer_data




  TelnetClass                              ReaderClass

                connect   send




                                  Telnet


  Telnet Server
動機と経緯
どういう方式で実現するか?

    client

 browser                                 Telnet server
                       telnet




             ↑は動やったら良いかわからなかったので、↓で




    client
                http            telnet
 browser                proxy            Telnet server
失敗。。



     client

 browser      web server

              CGI

                web2tel    Telnet server



                    DB
挫折。。


     client

 browser                       http.server

                                telnetlib    Telnet server



    ・Clientの識別はcookieで
    ・Clientからの文字列はURLのクエリで
    ・TelnetインスタンスはDictに
    ・Telnetインスタンスの識別はclientのcookieで
pywebsocketの使い方のさわり
pywebsocketの使い方のさわり(1)


handlerに書いておかないといけないもの



 ●   web_socket_do_extra_handshake
 ●   web_socket_transfer_data




                 詳しいことは、__init__.py standalone.py に書いてあります。
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 に書いてあります。
websocket API のさわり
接続と受信

 function connect() {
   socket = new WebSocket('ws://example.com:/sample');
   socket.onopen = function () {            #接続
    ~~~~~~;
   };
   socket.onmessage = function (event) {        #受信
    ~~~~~~;
     };




送信


     function send() {
       socket.send('mojiretu');
     }
handlerとhtmlを書いたら
 ●   ファイル名を”hogehoge_wsh.py” にして適当なディレクトリに置いて、

 ●   待ちうけポート、ドキュメントルート、handlerのディレクトリ等を指定して、

 ●   pywebsocketを起動する




たとえばこんな感じ
python C:pythonmod_pywebsocketstandalone.py -d C:pythonmod_pywebsocketexample




                        詳しいことは、__init__.py standalone.py に書いてあります。
Telnetについて
Telnetについて

・rfc854 (1983)



・文字列データを送ったり受け取ったりします

・tcp/23です

・送信と受信は同時に行う事ができます



・Client → Server の文字列データは1文字ずつ送信しています

・リモートエコーです(設定次第ですが)



・文字列以外にコマンドを送れます
telnetlibについて(1)

コネクションの確立、文字列の送信はこんな感じ


     tn = telnetlib.Telnet(node, 23)
     tn.write(mojiretu)




コマンドはバイト列で送るので、こんな感じになります。



     tn.get_socket().send(chr(255)+chr(243)) #これはbreak
telnetlibについて(2)
Socketに入ってきたデータの取得方法がたくさんあります。

・ブロックする

 read_until() #ある文字列を取得するまでブロックして待つ

 rea_all()     #EOFを取得するまでブロックして待つ

 read_some()    #データがあれば返すが、無い場合ブロックして待つ



・ブロックしない

 read_very_eager() #読み出せるデータを返す

 read_eager()     #読み出せるデータを返し、読み出せるものが無い場合エラー

 read_sb_data()   #サブオプション開始/終了の間に収集されたデータを返す

 read_lazy()      #キューに入っているデータを返す

 read_very_lazy() #処理済みキューに入っているデータを返す
最後に
“何を” のせるか



“何と何を” つなぐか
ご清聴ありがとうございました!

More Related Content

What's hot

CoreData 非同期データ処理
CoreData 非同期データ処理CoreData 非同期データ処理
CoreData 非同期データ処理次朗 永島
 
websocket-survery
websocket-surverywebsocket-survery
websocket-surveryhogemaru_
 
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか 私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか Kenta Yamamoto
 
Web packaging IETF 側
Web packaging IETF 側Web packaging IETF 側
Web packaging IETF 側yuki-f
 
はじめてのEmmet with Sublime Text2
はじめてのEmmet with Sublime Text2はじめてのEmmet with Sublime Text2
はじめてのEmmet with Sublime Text2Sadaaki HIRAI
 
モダンブラウザストレージ
モダンブラウザストレージモダンブラウザストレージ
モダンブラウザストレージKazuyuki Mori
 
Getting Started with Sublime Text 2
Getting Started with Sublime Text 2Getting Started with Sublime Text 2
Getting Started with Sublime Text 2masaaki komori
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料cryks
 

What's hot (10)

CoreData 非同期データ処理
CoreData 非同期データ処理CoreData 非同期データ処理
CoreData 非同期データ処理
 
Study2study3 nslope
Study2study3 nslopeStudy2study3 nslope
Study2study3 nslope
 
websocket-survery
websocket-surverywebsocket-survery
websocket-survery
 
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか 私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか
 
Web packaging IETF 側
Web packaging IETF 側Web packaging IETF 側
Web packaging IETF 側
 
はじめてのEmmet with Sublime Text2
はじめてのEmmet with Sublime Text2はじめてのEmmet with Sublime Text2
はじめてのEmmet with Sublime Text2
 
モダンブラウザストレージ
モダンブラウザストレージモダンブラウザストレージ
モダンブラウザストレージ
 
Getting Started with Sublime Text 2
Getting Started with Sublime Text 2Getting Started with Sublime Text 2
Getting Started with Sublime Text 2
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
 
Real timeweb
Real timewebReal timeweb
Real timeweb
 

Similar to HttpとTelnetをつなぐ何か

これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocketAdvancedTechNight
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術Shin Sekaryo
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレットTakashi Makino
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21Takakiyo Tanaka
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"Masaya Aoyama
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要Shumpei Shiraishi
 
NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!
NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!
NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!NGINX, Inc.
 
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話shigeki_ohtsu
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Reactor によるデータインジェスチョン
Reactor によるデータインジェスチョンReactor によるデータインジェスチョン
Reactor によるデータインジェスチョンAkihiro Kitada
 
Kubernetesと閉域網
Kubernetesと閉域網Kubernetesと閉域網
Kubernetesと閉域網Han Li
 
Let's begin WebRTC
Let's begin WebRTCLet's begin WebRTC
Let's begin WebRTCyoshikawa_t
 

Similar to HttpとTelnetをつなぐ何か (20)

これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
Web基礎
Web基礎Web基礎
Web基礎
 
HTTPとサーブレット
HTTPとサーブレットHTTPとサーブレット
HTTPとサーブレット
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
勉強会資料①
勉強会資料①勉強会資料①
勉強会資料①
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
10th jan 2013_miyazaki
10th jan 2013_miyazaki10th jan 2013_miyazaki
10th jan 2013_miyazaki
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!
NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!
NGINX基本セミナー(セキュリティ編)~NGINXでセキュアなプラットフォームを実現する方法!
 
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
Reactor によるデータインジェスチョン
Reactor によるデータインジェスチョンReactor によるデータインジェスチョン
Reactor によるデータインジェスチョン
 
Kubernetesと閉域網
Kubernetesと閉域網Kubernetesと閉域網
Kubernetesと閉域網
 
Let's begin WebRTC
Let's begin WebRTCLet's begin WebRTC
Let's begin WebRTC
 
Gaeja20121130
Gaeja20121130Gaeja20121130
Gaeja20121130
 

HttpとTelnetをつなぐ何か