先日のWebkit/HTML5勉強会#1での白石さんのchat sample with
websocketsに触発されて、apache+mod_pywebsocket(apache組み込みのwebsocketモジュール)でのLiteなチャットサンプルを作って見ました(白石さん、いろいろご教授頂きありがとうございます)。ソースのみの公開でちょっと不親切なのですが、僕のブログに
svn checkout 始め、簡単な解説込みで書いておきました。興味のある方は参考にして見てください。
http://blog.livedoor.jp/kotesaki/archives/1355651.html
standaloneでのサーバー起動とは異なり、apacheにモジュールとして組み込む場合は、各ブラウザから受信したメッセージを同期する仕組みが必要になります。本格的にやるのであれば、きちんとしたサーバープロセスを書く必要がありますが、今回はサンプルということで、fileベース
+ tail という非常に簡単なケースでコーディングしています(初めてのpythonコーディング・・・)。
P.S. mod_pywebsocketのapacheへの組み込み方を簡単にメモ書きしたエントリも書いてあります。
おー!
ぼくが聞く限り、pywebsocketを使った初の事例ですね。
素晴らしい!(pywebsocket作者の藤島さん@Google、見てますか?)
ちなみに、WebSocketってクロスオリジンポリシー関係ないってこないだ初めて知りました(てっきり無理なものだと・・思い込みって怖いですね(^^;)
a.comのWebアプリ、b.comとWebSocket通信できるのですよね。
そこら辺にもちょっと面白くなりそうな可能性を感じている今日この頃です。
2009/12/22 KOMATSU Kensaku <kensaku...@gmail.com>:
> --
>
> このメールは Google グループのグループ「html5-developers-jp」の登録者に送られています。
> このグループに投稿するには、html5-dev...@googlegroups.com にメールを送信してください。
> このグループから退会するには、html5-developer...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/html5-developers-jp?hl=ja からこのグループにアクセスしてください。
>
>
>
おお、これは、ありがたいです!
私は昨日悪戦苦闘(注1)の末にようやくpywebsocketのサンプルスクリプト
echo_wsh.pyとecho_client.pyが動作したばかりで、apache上の確認はマシンが
言う事を聞いてくれれば丁度今夜の予定なのですが、小松さんの解説がグッドタ
イミングで参考になります。fileでtailな実装というのもわかりやすくて素晴ら
しいです。
#注1: 今回pywebsocket様だけのために、物置から名誉の負傷パーツをかき集め
て予備軍マシンを組み立てたんですけれど、これが常時見守っていないと使えな
いという、却って大変なことに、、、^^;
> --
>
> このメールは Google グループのグループ「html5-developers-jp」の登録者に送られています。
> このグループに投稿するには、html5-dev...@googlegroups.com にメールを送信してください。
> このグループから退会するには、html5-developer...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/html5-developers-jp?hl=ja からこのグループにアクセスしてください。
>
>
--
Toshiro Takahashi
高橋登史朗
http://allabout.co.jp/internet/javascript/profile/mbiopage.htm
http://jsgt.org/mt/01/
Replyありがとうございます。>白石さん、高橋さん
説明が抜けていたところがありましたので、先ほど修正しました。
昨夜、半分眠りながら書いたエントリーなので、誤りとか分かり辛い点もあるかと思いますが、
その際は連絡いただければと思います。(ダイレクトでも構いません)
2009年12月22日9:43 Toshiro Takahashi <ta...@game.gr.jp>:
> 関係ないということはありませんよ。Origin/WebSocket-Origin ヘッダでネゴシエーションしてます。
おお、そうでしたか。
クライアントAPI仕様のほうに記述がなくて、pywebsocketがクロスオリジンで動作したものだから、てっきりそう思い込んでしまいました。The
Web Socket Protocol、Security Considerationは適当に流して読んでました・・
ご指摘ありがとうございました!
よかった、間違った知識を広めずにすんで(^^;
2009/12/22 Fumitoshi Ukai (鵜飼文敏) <uk...@chromium.org>:
小松です。
handshake時に、request.ws_originでチェックするんですね。なるほど
apache + mod_pywebsocketを軽く使ってみて&pywebsocketの中身をざっと見てみて、メモっておいたほうがよさげなところを
http://blog.livedoor.jp/kotesaki/archives/1357005.html
にまとめてみました。コメントとかもらえると嬉しいです。
お題目としては、
1. requestオブジェクトのプロパティ説明
2. mod_pywebsocketのapiに関する説明
3. apache側での設定変更箇所
defaultでpersistent-connectionが有効なままだと、close処理にdelayが発生する。
4. javascriptで留意した方が良い点
keep-aliveのダミーデータ(heartbeat)を送信しないとapacheから切られてしまう(default : 5分)
てなところです。
w3c, ietf共に仕様書をななめ読みしかしていないため、勘違いしているところも多いかも。。。真面目に読んでみます。
#pywebsocketの上で動く BWTP もどきを作ってみるのも
#楽しいかも。
#最初に\00・・・
2009年12月22日11:54 Fumitoshi Ukai (鵜飼文敏) <uk...@chromium.org>:
> 小松です。
> apache + mod_pywebsocketを軽く使ってみて&pywebsocketの中身をざっと見てみて、メモっておいたほうがよさげなところをhttp://blog.livedoor.jp/kotesaki/archives/1357005.html
> にまとめてみました。コメントとかもらえると嬉しいです。
>
> お題目としては、
> 1. requestオブジェクトのプロパティ説明
> 2. mod_pywebsocketのapiに関する説明
> 3. apache側での設定変更箇所
> defaultでpersistent-connectionが有効なままだと、close処理にdelayが発生する。
> 4. javascriptで留意した方が良い点
> keep-aliveのダミーデータ(heartbeat)を送信しないとapacheから切られてしまう(default : 5分)
> てなところです。
おお、また、私が次に欲しいものばかり、、、ありがとうございます(^^)
一応、教えていただくばかりでは申し訳ないので、少しだけ私の苦労話もアップしておきます。
1.CentOS5 たぶんOK。
最初、物置から集めたジャンクパーツチームで組み立てたサンドボックスマシンはCentOS5だったのですがこれは、カーネルパニック連発しながらも、
シェル上でecho_client.pyは動作してましたので、オウンゴールさえなければ、ちゃんとやれば動いたと思います。
2.Fedora12 失敗。
その後、Atomの廉価マザーを投入して、今度は、Fedora12を入れてみたのですが、これは、connobject.cの(b)を修正してもエ
ラーが止まらず、あっさり断念。
3.Ubuntu9.10 Server版 OK。
ふと、小松さんがUbuntuらしいことに気づき、再度OSチェ~ンジ。今度は、するするとエラーもなく入って、めでたくApache上でも成功し、そ
のうえ、小松さんのサンプルも気持ちよく動作してくれました(^^)v。
今夜サンタの仕事が終わったら、この環境からテストをはじめてみたいと思います。
> w3c, ietf共に仕様書をななめ読みしかしていないため、勘違いしているところも多いかも。。。真面目に読んでみます。
> #pywebsocketの上で動く BWTP もどきを作ってみるのも
> #楽しいかも。
> #最初に\00・・・
>
> 2009年12月22日11:54 Fumitoshi Ukai (鵜飼文敏) <u...@chromium.org>:
>
>
>
> > 2009/12/22 Shumpei Shiraishi <shumpei.shirai...@gmail.com>
>
> >> ちなみに、WebSocketってクロスオリジンポリシー関係ないってこないだ初めて知りました(てっきり無理なものだと・・思い込みって怖いですね(^^;)
>
> > 関係ないということはありませんよ。Origin/WebSocket-Origin ヘッダでネゴシエーションしてます。
>
> >> a.comのWebアプリ、b.comとWebSocket通信できるのですよね。
>
> > b.comのWebSocketサーバーが a.comのWebアプリをoriginと認めていれば 、です。
> > pywebsocketでは echo backしているのでどこからでも繋ぐことができますが、
> > security的にはサーバー側はちゃんと許容できるoriginを指定しておいたほうがよいです。
> > (と The Web Socket Protocol、Security Considerationにも書かれています)
>
> > --
> > ukai
>
> >> そこら辺にもちょっと面白くなりそうな可能性を感じている今日この頃です。
>
> >> 2009/12/22 KOMATSU Kensaku <kensaku.koma...@gmail.com>:
> >> > 小松です。
>
> >> > 先日のWebkit/HTML5勉強会#1での白石さんのchat sample with
>
> >> > websocketsに触発されて、apache+mod_pywebsocket(apache組み込みのwebsocketモジュール)でのLiteなチャ ットサンプルを作って見ました(白石さん、いろいろご教授頂きありがとうございます)。ソースのみの公開でちょっと不親切なのですが、僕のブログに
> >> > svn checkout 始め、簡単な解説込みで書いておきました。興味のある方は参考にして見てください。
> >> >http://blog.livedoor.jp/kotesaki/archives/1355651.html
>
> >> > standaloneでのサーバー起動とは異なり、apacheにモジュールとして組み込む場合は、各ブラウザから受信したメッセージを同期する仕組みが必要に なります。本格的にやるのであれば、きちんとしたサーバープロセスを書く必要がありますが、今回はサンプルということで、fileベース
夜まで何もできないので、とりあえず、
小松さんのサンプルを別ドメイン上に置かさせていただいたものを上げておきま
す。通信できてます。
http://jsgt.org/ws/sample.html
http://bloga.jp/sample.html
高橋登史朗です
小松です。
成功おめでとうございます!!インストールOS、ちゃんと書かなきゃなんなかったですね。。。激しく反省m(__)m
ちなみに、CentOS5でも動作確認しています。mod_pythonの動作が???なところはありますが(PythonHandlerの辺り)
#多分、pythonをデフォルトの2.4のままで使っているから?
あと、Jettyでも、WebSocketがサポートされているようです。
http://blogs.webtide.com/gregw/entry/jetty_websocket_server
#小松は、javaな人ではないので試していません。。。
開発者は、IETFでbwtp
http://www.ietf.org/id/draft-wilkins-hybi-bwtp-00.txt
を提案されているGregさんです。なぜ、GregさんがWeb socketに対してbwtpを提案しているかは、
http://blogs.webtide.com/gregw/entry/bidirectional_web_transfer_protocol_bwtp
一読の価値ありかと。
-----
So what's so bad about the Websocket protocol proposal? The main
things I dislike are that the document is impenetrable, the protocol
inflexible and it is entirely different from other IETF application
protocols for no good reason. But rather than throw (more)mud, I'd
rather sing the praises of the approach that I have taken:
-----
2009年12月24日9:39 tato <ta...@game.gr.jp>:
> あと、Jettyでも、WebSocketがサポートされているようです。
おお!素晴らしい!
年末年始にトライしてみようかと思ってたネタだったのですが、先を越されました。が、ラッキー(^^)
Jetty上で動くなら、もしかするとGoogle App Engine上でも動くかもしれません。
試してみたい、けど、時間が無いなあ。
どなたか試したら、レポートお願いします!!
2009/12/24 KOMATSU Kensaku <kensaku...@gmail.com>:
おぉぉぉ、ありがとうございますm(__)m
2つのURL、ソースは同じってことですね。
確認させていただきました。。。
2009年12月24日10:04 Toshiro Takahashi <ta...@game.gr.jp>:
Jetty で試してますよ。
http://d.hatena.ne.jp/shootaroo/20091214/1260811625
Jettyの実装はかなりわかりやすい気がします。
素晴らしい!Good Job!
もうMavenから利用可能なんですね~
楽だなあ、ほんと。
2009/12/24 Shotaro Tsubouchi <shotaro....@gmail.com>:
なるほど、、、js側で明示的に ws.close(); しないとダメなんですね。
ここは、結構はまってました。
2009年12月24日13:54 Shumpei Shiraishi <shumpei....@gmail.com>:
明示的に Close しなきゃならないのって、どうやら仕様?みたいですね。
http://dev.w3.org/html5/websockets/#garbage-collection
Worker スレッドでリッスンしてるかもだから、、とかなんでしょうか?
Web Workers がどんな感じなのか良くわかってないですが。
ここでしょうか?
---
If a WebSocket object is garbage collected while its connection is
still open, the user agent must close the Web Socket connection.
---
user agent(=ブラウザ)はgarbageに対してcloseしなきゃならないということは、やはりブラウザ側のマター(バグ?)と捉えています。
ただ、ページを閉じるという操作は、ユーザー側からの切断処理に該当しますので、
window.onunload = function(){ ws.close(); }
を呼ぶのは良いDesignですよね。
あと、pywebsocketのecho_wsh.pyでは"Goodbye"を送信するとコネクションクローズする仕様になっているのですが、どうもWSがクローズされないことが稀にあるんですよね。。。これも、バグなのかなぁと。
#きちんと追えてないのですが
明示的に切る場合は、"Goodbye"とかを送るんじゃなく、ws.close();しなさいということなんでしょうね。
2009年12月24日17:39 Shotaro Tsubouchi <shotaro....@gmail.com>:
# html5-dev-jp と gae-ja にクロスポストです
小松さんのサンプルを見て触発され、appengine のアプリでもなんとか websocket を使って server push
もどきができないか試してみましたのでご紹介させてください(かなりコードをパクっています)。
まずは動くサンプルがこちらにあります。
http://websocketchat.appspot.com/
解説などがこちらにあります。
http://takashi-matsuo.blogspot.com/2009/12/integrating-websockets-with-appengine.html
html5 の目玉でもある websockets (もしくは comet) は appengine
でも使いたいという声を良く聞きます。ただ、現在の appengine には 30秒制限があって、appengine のみでは comet や
websockets のような仕組みは難しいように思います。
そこで実験的に動くものを作ってみました。はっきり言ってかなり手抜きしているのでそのままプロダクションでは使えないと思いますが、これをきっかけにもっと良いものが出てくると良いなと思ってシェアしてみます。
Merry X'mas and Happy coding :-)
--
Takashi Matsuo
Kay's daddy
2009/12/24 KOMATSU Kensaku <kensaku...@gmail.com>:
昼間に松尾さんのコードを見たときに「なぜ、ws + xhr?」と思ったのですが、
なるほど、そういうことだったんですね。
僕の実装(file + tail) もそうですが、wsと独立に情報共有&管理のフレームが
必要な訳で、それをxhrでも実現できるんだなぁと目から鱗でした。
他にも、いろんなパターンが考えられると思いますが、各種実装を通じて
整理されていくんでしょうね。楽しみ:)
P.S. openID対応したんすね。
2009年12月24日23:22 Takashi Matsuo <matsuo....@gmail.com>:
ショータローさんがLTをやられた時の資料を見つけました。思わずPOSTしちゃいます。
#聞きたかった・・・
websocketの必要性について、模式的に非常にわかりやすく書かれています。すばらしぃ
http://docs.google.com/present/view?id=dddvzhrc_3frv8djhr
この辺りについて、より詳しく知りたい方は、以下のDraftもお薦めです。
http://www.ietf.org/id/draft-loreto-http-bidirectional-01.txt
2009年12月25日1:43 KOMATSU Kensaku <kensaku...@gmail.com>:
紹介されてしまいましたw いやはやお恥ずかしい。。
前日の夜に適当に作ったやつなので、見るのも適当でお願いしますw
ちょっと話を戻して、
>>>> ---
>>>> If a WebSocket object is garbage collected while its connection is
>>>> still open, the user agent must close the Web Socket connection.
>>>> ---
>>>> user agent(=ブラウザ)はgarbageに対してcloseしなきゃならないということは、やはりブラウザ側のマター(バグ?)と捉えています。
ここには gc 対象にする為の事しか書いてなかったですね(^^;
プロトコル仕様の方を見たのですが、こっちだと
---
Except as indicated above or as specified by the application layer
(e.g. a script using the Web Socket API), user agents should not
close the connection.
http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-68#section-4.3
---
接続に失敗した時か API が使わる場合を省いて、user agent は接続を close すべきでない、
となっているので、これからするとブラウザマターでは無いのかも、という気がします。
何にしても、
>>>> window.onunload = function(){ ws.close(); }
これはやっとけ、と言うのは間違いないですね。
「ブラウザを閉じる」とか「ページをリロードする」という操作を
どう解釈するべきかということなのかなぁと。僕の考えでは、
これらの操作は "specified by the application layer" だと思います。
(”a script using the Web Socket API" は、あくまでe.g.なので)
>> Except as indicated above or as specified by the application layer
このセクションで言っていることの本意は、「無通信だからって、
backgroundのタイマーとかで勝手に切っちゃダメですよ」という
ことなんじゃないかなぁと。
#Apache + mod_pywebsocketだと、デフォルト5分で勝手に
#切られちゃいますが(^-^;;
#User-agentが切っているわけでは(たぶん)ないけど
2009年12月28日12:01 Shotaro Tsubouchi <shotaro....@gmail.com>:
小松さんのWSサーバーサイドを使わせていただき とりあえずクライアント側で
jQuery用のプラグインなど作りつつテストしてみています。
http://bloga.jp/ws/jq/wsload/s1.htm
#英語は努力しつつも嘘ばっかりですので目をつぶってくださいf^^;
ここで、作ったのは $(セレクタ).load()メソッドライクな$(セレクタ).wsload
()です。セレクタで指定したDOMへ自動的に受信結果を流し続けてくれます。
$.ajaxに相当する$.conを作って、jQueryのコードも借用しつつ試し中です。
お陰さまで思ったより順調ではありますが、Chromeが時々反応しなくなることが
あるのが、少し気になってます。今のところ原因不明です。
再起動か、一旦、タスクマネージャーでキルすると動いてくれてはいますf^^;。
今のところ、サーバー負荷はあまりかかっていないようには見えますが。。。
On Thu, 24 Dec 2009 10:24:12 +0900
KOMATSU Kensaku <kensaku...@gmail.com>さん wrote:
> 小松です。
>
> おぉぉぉ、ありがとうございますm(__)m
> 2つのURL、ソースは同じってことですね。
> 確認させていただきました。。。
コピペするば、ローカルからでもどこからでも共有できます(^^)
高橋登史朗です
--
Toshiro Takahashi <ta...@game.gr.jp>
小松です。
とりいそぎ、サンプルコードのknown issueをfixしました。
svn checkout http://html5clock.googlecode.com/svn/trunk/websocketsample
somewhere
こちらに入れ替えると、以下の症状も(多分)安定すると思います。
> お陰さまで思ったより順調ではありますが、Chromeが時々反応しなくなることが
> あるのが、少し気になってます。今のところ原因不明です。
>
> 再起動か、一旦、タスクマネージャーでキルすると動いてくれてはいますf^^;。
> 今のところ、サーバー負荷はあまりかかっていないようには見えますが。。。
■/python/test_wsh.py
サーバーサイドスクリプトで threadのclosing処理が抜けていましたので、
ここを直しています。
■ /html/sample.html
クライアント側でもwindow.unload時でのws.closeの処理を
追加したり(ソケットが残ることがある)、勝手に切れるのを防ぐために、setInterval
で'Heartbeat'を送ったり・・・といったところとか直しています。
2009年12月30日3:08 Toshiro Takahashi <ta...@game.gr.jp>:
On Wed, 30 Dec 2009 10:04:45 +0900
KOMATSU Kensaku <kensaku...@gmail.com>さん wrote:
> 高橋さん
>
> 小松です。
>
> とりいそぎ、サンプルコードのknown issueをfixしました。
> svn checkout http://html5clock.googlecode.com/svn/trunk/websocketsample
> somewhere
> こちらに入れ替えると、以下の症状も(多分)安定すると思います。
>
> > お陰さまで思ったより順調ではありますが、Chromeが時々反応しなくなることが
> > あるのが、少し気になってます。今のところ原因不明です。
> >
> > 再起動か、一旦、タスクマネージャーでキルすると動いてくれてはいますf^^;。
> > 今のところ、サーバー負荷はあまりかかっていないようには見えますが。。。
>
> ■/python/test_wsh.py
> サーバーサイドスクリプトで threadのclosing処理が抜けていましたので、
> ここを直しています。
>
> ■ /html/sample.html
> クライアント側でもwindow.unload時でのws.closeの処理を
> 追加したり(ソケットが残ることがある)、勝手に切れるのを防ぐために、setInterval
> で'Heartbeat'を送ったり・・・といったところとか直しています。
なるほど。
こちらも入れ替えて、ついでに違う書き方をしてみました。jQuery.loadライク
なメソッドは逆にチャットには不向きですのでf^^;基本メソッドで書き直したら
むしろシンプルになりましたf^^;
http://bloga.jp/ws/jq/conn/b1.htm
来年もよろしくお願いいたします(_ _)。
#小松さんトラックバックすみません消しといていただけたら幸いですf^^;
--
小松です。
こちらこそ、pywebsocket という素晴らしい実装を公開いただきありがとうございます。
サンプルレベルでも実装を進めることで、色々と分かってきましたし、実に楽しい時間を
過ごさせていただいています。
他にも、ブログにはEntryしていないtipsがありますので、近日中にUpしたいと思います。
#blogで書いてると、構造化が難しいので、他の手段も考えたいと思っています。
#この辺り(ライブラリと利用法/tipsの関係)のドキュメント連携が上手く図れればいいの
#ですが。お手伝い出来るところがあれば、是非ご連絡ください。
あと、websocketは bi-directional に留まらず、様々な可能性を秘めていると思います。
ステートフルコーディングがwebで可能になるところがミソかなぁと。
ちっちゃいネタですが、僕の下記のエントリはその一端かと
http://blog.livedoor.jp/kotesaki/archives/1363591.html
話は変わって、デブサミ2010の小松のセクションでは、web sql database と
web socketsを連携したデモンストレーションを行おうと画策中です。こちらでも
新しい利用法を提案したいと思っています。こうご期待:)
http://www.seshop.com/event/dev/2010/timetable/Default.asp?mode=detail&eid=145&sid=883&tr=08_Web#883
P.S. デブサミ2010で(展示とか)手伝うこととかあります?>白石さん、波多野さん
2010年1月5日10:39 Yuzo Fujishima <yu...@google.com>:
白石です。
> P.S. デブサミ2010で(展示とか)手伝うこととかあります?
いやーそれが、勝手がわからなかったのと展示するものも特にないなあ・・・と言うことでブース申請しなかったんですよね(^^;
しといた方が良かったですか?
小松さんに限らず、「展示したい!」と言うものがある方が何人かいらっしゃるようであれば、無理を承知でデブサミの方に頼んでみますよ。
2010/1/5 KOMATSU Kensaku <kensaku...@gmail.com>:
とりあえず、これまでに作ったサンプルのcheckoutとblogに書いたtipsをgoogle-codeにまとめました。
websocket-sample
http://code.google.com/p/websocket-sample/
下手な英語で恥ずかしい限りですが、もし宜しければ pywebsocket からリンクを貼っていただければと>藤島さん
サンプルプログラムの使い方とかも、順次こちらにアップしていく予定です。
2010年1月5日13:32 Shumpei Shiraishi <shumpei....@gmail.com>:
websocketsのtipsネタです。結構重要かも。
#個人的には、目から鱗だったので
browser <-> server間の!ASCII通信では、encodeURIComponent()でASCIIに変換して
送受信するのが常識ですが、WebSocketsではUTF-8での送受信がProtocolで規定されて
いるので、そんな変換必要ないじゃん!っていうよりリソースの無駄(ASCIIに変換すると、
データ量が概ね3倍になってしまう):pということで、その辺りをブログにアップしました。
「websocketでは、encodeURIComponet()は使うべきではない」
http://blog.livedoor.jp/kotesaki/archives/1369902.html
要は、encodeURIComponent()しないで送信するだけなのですが、ここではまるのがpythonのunicode型で、何も考えないとサーバーサイドでエラーになってしまいます。これを回避するためには
.encode('utf-8'), .decode('utf-8')
のcallが必要になりますので、pywebsocketを指向されている方は、こちらも含めでご確認ください。
P.S.
http://code.google.com/p/websocket-sample/も更新済み
2010年1月6日10:27 Yuzo Fujishima <yu...@google.com>:
On Sat, 9 Jan 2010 01:17:43 +0900
KOMATSU Kensaku <kensaku...@gmail.com>さん wrote:
> 小松です。
>
> websocketsのtipsネタです。結構重要かも。
> #個人的には、目から鱗だったので
>
> browser <-> server間の!ASCII通信では、encodeURIComponent()でASCIIに変換して
> 送受信するのが常識ですが、WebSocketsではUTF-8での送受信がProtocolで規定されて
> いるので、そんな変換必要ないじゃん!っていうよりリソースの無駄(ASCIIに変換すると、
> データ量が概ね3倍になってしまう):pということで、その辺りをブログにアップしました。
> 「websocketでは、encodeURIComponet()は使うべきではない」
> http://blog.livedoor.jp/kotesaki/archives/1369902.html
そうですね。私も頭からHTML4までの感覚でとりあえずurlencodedな送信にして
おけば安心という頭でいたのですけれど、utf-8で決まりなのですからその通り
ですよね。
http://ymotongpoo.appspot.com/websocket_jp/server-side_requirements.html#id4
> 要は、encodeURIComponent()しないで送信するだけなのですが、ここではまるのがpythonのunicode型で、何も考えないとサーバーサイドでエラーになってしまいます。これを回避するためには
> .encode('utf-8'), .decode('utf-8')
> のcallが必要になりますので、pywebsocketを指向されている方は、こちらも含めでご確認ください。
>
> P.S.
> http://code.google.com/p/websocket-sample/も更新済み
修正しようとしてpythonのutf-8の扱い周辺でハマりました(^^;が、お陰さまで、
うまくいきました。
私のコードもなるべく明日書き換えます。