[html5-developers-jp:955] WebSocket draft 76 のサーバサイドの実装始めた方いますか?

102 views
Skip to first unread message

Makoto

unread,
May 23, 2010, 5:21:21 AM5/23/10
to html5-developers-jp
こんにちは

2~3週間ほど前にWebSocketのドラフトが更新され、大掛かりな変更があったようです。

http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

クライアントサイドではGoogle Chromiumで既に実装済みです。
http://codereview.chromium.org/1108002

サーバサイドではGoogle Goが既に実装していて、node.jsの方も取り組みが始まっているようです。

http://code.google.com/p/go/source/detail?spec=svn3f986a031b92a1b3cdaa3c3fceff19692ff21170&r=ef24ea09359c372ec0943aae5f42b3ff337e4713

http://github.com/ry/node/issues#issue/111

私は現在、Rubyのem-websocket (http://github.com/igrigorik/em-websocket) を使ってい
るのですが、いつごろから76の対応を考えるべきか思案中です。googlego版のテストをみたところ、75と76はインターフェースが非互換っぽい
ので、出来ればChromeやWebKitがアップグレードされる前に対応できればと思っています。

つきましては、以下についてどなたかご存知でしたら情報共有していただければと思い、ポストしました。

1.ChromeやWebKitのdraft76へのアップグレード時期についてはどこに聞けば良いか
2.もし75,76のインターフェースが非互換の場合、新旧ブラウザ間の互換性はどのようにして保つべきか
3.GoogleGo, node.js以外でサーバサイドの実装を始めているプロジェクトはあるか

よろしくお願いいたします。

makoto

--
このメールは Google グループのグループ「html5-developers-jp」の登録者に送られています。
このグループに投稿するには、html5-dev...@googlegroups.com にメールを送信してください。
このグループから退会するには、html5-developer...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/html5-developers-jp?hl=ja からこのグループにアクセスしてください。

Fumitoshi Ukai (鵜飼文敏)

unread,
May 23, 2010, 9:45:46 PM5/23/10
to html5-dev...@googlegroups.com
On Sun, May 23, 2010 at 18:21, Makoto <inou...@googlemail.com> wrote:
こんにちは

2~3週間ほど前にWebSocketのドラフトが更新され、大掛かりな変更があったようです。

http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

IETFの HyBi draftとしてでましたね。
 
クライアントサイドではGoogle Chromiumで既に実装済みです。
http://codereview.chromium.org/1108002

これは内部的につかっているコードなので、JavaScriptのWebSocket APIで使われるものとは違います。



サーバサイドではGoogle Goが既に実装していて、node.jsの方も取り組みが始まっているようです。

http://code.google.com/p/go/source/detail?spec=svn3f986a031b92a1b3cdaa3c3fceff19692ff21170&r=ef24ea09359c372ec0943aae5f42b3ff337e4713

http://github.com/ry/node/issues#issue/111

私は現在、Rubyのem-websocket (http://github.com/igrigorik/em-websocket) を使ってい
るのですが、いつごろから76の対応を考えるべきか思案中です。googlego版のテストをみたところ、75と76はインターフェースが非互換っぽい
ので、出来ればChromeやWebKitがアップグレードされる前に対応できればと思っています。

つきましては、以下についてどなたかご存知でしたら情報共有していただければと思い、ポストしました。

1.ChromeやWebKitのdraft76へのアップグレード時期についてはどこに聞けば良いか

  chrome trunk, webkit nightly build は既に draft 76 (hybi 00, ただし closing handshakeのほうはまだです)
  dev channel はもうすぐ
  beta/stable は Chrome 6 から
 
2.もし75,76のインターフェースが非互換の場合、新旧ブラウザ間の互換性はどのようにして保つべきか

インターフェイスというか protocol が非互換です。75のclientは 76のserverと connectionをはれませんし、76のclientは 75のserverとconnectionをはれません。
pywebsocketでは、とりあえず76でhandshakeしてみてだめだったら75でhandshakeするようにしています。
Sec-WebSocket-* があるかないかで判断してもいいかと思います。
 
3.GoogleGo, node.js以外でサーバサイドの実装を始めているプロジェクトはあるか

http://code.google.com/p/pywebsocket  (webkit, chromeでテストにつかっています)

-- 
鵜飼文敏

Makoto

unread,
May 24, 2010, 12:36:40 AM5/24/10
to html5-developers-jp
お返事ありがとうございます。
実装者の方からお返事いただけるとは思っていませんでした。

> > 1.ChromeやWebKitのdraft76へのアップグレード時期についてはどこに聞けば良いか
>
> chrome trunk, webkit nightly build は既に draft 76 (hybi 00, ただし closing
> handshakeのほうはまだです)
> dev channel はもうすぐ
> beta/stable は Chrome 6 から
>

Chrome 6のリリース予定時期というのは公開されているのでしょうか?

> pywebsocketでは、とりあえず76でhandshakeしてみてだめだったら75でhandshakeするようにしています。
> Sec-WebSocket-* があるかないかで判断してもいいかと思います。
>

現状はなんとかそれで判断可能かもしれませんが、将来的にこの判別方法はかなりつらくなりそうですね。

2週間ほど前にWindows版のChromeを試したのですが、確かバージョンが4.xでurlのクエリ("?"以下の部分)の挙動が微妙に異なって
いて、デバッグにかなり苦労した経験があります。

一番良いのはヘッダーかどこかにバージョン番号が割り当てられることなのですが、こればかりは仕様がそのように変更になるのをまつしかしかたがない気が
します。


> > 3.GoogleGo, node.js以外でサーバサイドの実装を始めているプロジェクトはあるか
>
> http://code.google.com/p/pywebsocket (webkit, chromeでテストにつかっています)
>

ありがとうございます。コードの方を見てみたいと思います。


昨年の12月ごろに各言語、フレームワークが一斉にWebSocketをサポートしたのですが、これが今回の改訂で一気に動かなくなるのが少し心配で
す。

どういったフレームワークがサポートしているかは昨年末にブログかきました。英文ですがご参考になれば幸いです。

http://blog.new-bamboo.co.uk/2009/12/30/brain-dump-of-real-time-web-rtw-and-websocket


makoto

Takuya Oikawa

unread,
May 24, 2010, 12:49:49 AM5/24/10
to html5-dev...@googlegroups.com
Google 及川です。

Chrome (Chromiumというほうが適切ですが) の開発スケジュールは http://www.chromium.org/developers/calendar で公開されています。現在のところ、Chrome 5.0のものしか、それもStableのリリースについてはTBDとしてしか記述しておりませんが、これがすべてです。

Chrome 6.0についても時期が来れば、ここに記載されます。

すでに、Devが6.0になっていることと、http://www.chromium.org/developers/calendar にあるGeneral Release Lifecycleからだいたいのターゲット時期を類推していただければと思います。

よろしくお願いします。

Google 及川

KOMATSU Kensaku

unread,
May 24, 2010, 1:27:53 AM5/24/10
to html5-dev...@googlegroups.com
小松です。

思いっきり私見ですが・・・

75/76については、ドラフトのリビジョン番号ですので、バージョンとしてプロトコルヘッダーに
入ってくるのは厳しいかなぁと思います。(特に、今回 "00" として番号が振り直されましたし)

現在のドラフトがRFCになった暁には(来年春ぐらい?)、これを"1.0" 扱いにして、次のバージョン
に対する検討("1.1" or "2.0" or Ohter?)が始まるでしょうし、このステートになったら、
プロトコルヘッダーにWebSocketのバージョンが入ってくる可能性はあると思います。

恐らく、これから出てくるブラウザ実装は、"00" をベースラインとして登場してくるのでないかと
思いますし、75以前のサーバー実装系はいずれ使えなくなるんだろうなぁと予想しています。
(76 への大幅な変更理由はセキュリティへの対応であることも考えるに)

この辺りは、あくまで過渡期ですのでしょうがないかと・・・

>> pywebsocketでは、とりあえず76でhandshakeしてみてだめだったら75でhandshakeするようにしています。
>> Sec-WebSocket-* があるかないかで判断してもいいかと思います。
>>
>
>現状はなんとかそれで判断可能かもしれませんが、将来的にこの判別方法はかなりつらくなりそうですね。
>
>2週間ほど前にWindows版のChromeを試したのですが、確かバージョンが4.xでurlのクエリ("?"以下の部分)の挙動が微妙に異なって
>いて、デバッグにかなり苦労した経験があります。
>
>一番良いのはヘッダーかどこかにバージョン番号が割り当てられることなのですが、こればかりは仕様がそのように変更になるのをまつしかしかたがない気が
>します。



2010年5月24日13:36 Makoto <inou...@googlemail.com>:

Makoto

unread,
May 24, 2010, 9:50:44 AM5/24/10
to html5-developers-jp

Chromiumの日程にカレンダーがあるとは知りませんでした。参考にさせていただきます。

確かに現在の仕様は過度期のものですが、WebSocketはかなりWebの可能性をかえるものなので、変わりゆく仕様についていくのは大変かもしれま
せんが、どんどんいろいろな例にチャレンジしていく価値はあるのかなと思います。

みなさま色々な情報を提供してくださりありがとうございます。

Makoto

unread,
Jun 3, 2010, 6:41:02 AM6/3/10
to html5-developers-jp
こんにちは

お世話になっております。

pywebsocketのstandalone.pyを使おうと思っていろいろ試したのですが、python初心者のためhandshakeモジュール
のインポートでつまずいているところです。

もしなにか設定オプション等でなにかつけわすれているところがあれば教えていただけないでしょうか?

[src]$ echo $PYTHONPATH
/Users/makoto/src/pywebsocket-read-only/src
[mod_pywebsocket]$ sudo python ./standalone.py -p 9999
Traceback (most recent call last):
File "./standalone.py", line 474, in <module>
_main()
File "./standalone.py", line 361, in _main
default=handshake.DEFAULT_WEB_SOCKET_PORT,
AttributeError: 'module' object has no attribute
'DEFAULT_WEB_SOCKET_PORT'

ちなみにrun_all.pyを走らせると普通にサーバが立ち上げられているようです。

初歩的な質問で申し訳ないのですがよろしくおねがいします。



On May 24, 2:45 am, Fumitoshi Ukai (鵜飼文敏) <u...@chromium.org> wrote:
> On Sun, May 23, 2010 at 18:21, Makoto <inoue...@googlemail.com> wrote:
> > こんにちは
>
> > 2~3週間ほど前にWebSocketのドラフトが更新され、大掛かりな変更があったようです。
>
> >http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76
>
> IETFの HyBi draftとしてでましたね。
> http://www.ietf.org/id/draft-ietf-hybi-thewebsocketprotocol-00.txt
>
> > クライアントサイドではGoogle Chromiumで既に実装済みです。
> >http://codereview.chromium.org/1108002
>
> これは内部的につかっているコードなので、JavaScriptのWebSocket APIで使われるものとは違います。
>
>
>
>
>
>
>
> > サーバサイドではGoogle Goが既に実装していて、node.jsの方も取り組みが始まっているようです。
>
> >http://code.google.com/p/go/source/detail?spec=svn3f986a031b92a1b3cda...

Makoto

unread,
Jun 3, 2010, 10:04:28 AM6/3/10
to html5-developers-jp
ただ単にpython setup.py buildと sudo python setup.py installをしていないだけでした。現在は普
通にうごいています。

おさがわせしました。
> >http://code.google.com/p/pywebsocket(webkit, chromeでテストにつかっています)

Makoto

unread,
Jun 17, 2010, 7:25:54 PM6/17/10
to html5-developers-jp
こんにちは

ちょっとご報告おくれてしまいましたが、Rubyのem-websocketライブラリでもdraft76仕様がサポートされるようになりました。

http://github.com/igrigorik/em-websocket

私も少しコードをContributeしたのですが、その時にPywebsocketについていたテストスクリプトが非常に役にたちましたのでこの場で
お礼を述べさせていただきます。

なお、新しい仕様のサポート作業の過程で学んだことなどをブログに書きました。

http://blog.new-bamboo.co.uk/2010/6/7/living-on-the-edge-of-the-websocket-protocol

他の言語での新しいドラフト実装の参考にでもなれば幸いです(node.jsなどでもすでにドラフト76がサポートされているようですが)。

makoto

Norio Kobota

unread,
Jun 18, 2010, 12:04:48 PM6/18/10
to html5-developers-jp
Makotoさん、こんばんは。
とても詳しくて分かりやすい記事をありがとうございました。

記事で記述されていらっしゃる、
> NOTE: I am not sure why Sec- ...
この部分に付いては私もとても不思議に思っています。Captchaのようなヘッダとbodyは本当に必要だったのか、と言う点に付いても。

> 3.GoogleGo, node.js以外でサーバサイドの実装を始めているプロジェクトはあるか
との事でしたので・・・

lighty用のmod_websocketも少し前にSPEC-76対応してみました。
なお、75/76は選択式(configure option)とし、両対応にするのはやめました。(面倒だったから、という訳では無いです:)

テストしてる際に少し気になった点は、
http://github.com/nori0428/mod_websocket/issues#issue/2
こういった所でしょうか。

Upgradeヘッダ付きのGET requestの扱いをどのようにするのが正しいのか、をしっかり調べた訳ではありませんので間違っているかもしれ
ませんが、ちょっとHTTPを逸脱し過ぎじゃないかな、と少し感じています。。。
例えば、ブラウザが発行したWebSocket Handshakeのリソースが無い場合。(GET /chat HTTP/1.1 ...でサーバ側
には/chatと言うresourceが無い場合)
WebSocketの仕様では単純にdisconnectです。しかし、ここは404を返すべきでは?とか。

また、サーバにとってOriginヘッダがあまり意味をなさない、と言う点でセキュリティ上大丈夫なのか、に確信が持てていません。

最後に、希望。ブラウザでのbinary frame supportを心待ちにしています。
ではでは:)

On 6月18日, 午前8:25, Makoto <inoue...@googlemail.com> wrote:
> こんにちは
>
> ちょっとご報告おくれてしまいましたが、Rubyのem-websocketライブラリでもdraft76仕様がサポートされるようになりました。
>
> http://github.com/igrigorik/em-websocket
>
> 私も少しコードをContributeしたのですが、その時にPywebsocketについていたテストスクリプトが非常に役にたちましたのでこの場で
> お礼を述べさせていただきます。
>
> なお、新しい仕様のサポート作業の過程で学んだことなどをブログに書きました。
>
> http://blog.new-bamboo.co.uk/2010/6/7/living-on-the-edge-of-the-webso...

Takanao Endoh

unread,
Jun 21, 2010, 2:00:57 AM6/21/10
to html5-dev...@googlegroups.com
遠藤です。

Erlang/MochiwebのWebSocket Serverにdraft76を実装しました。

http://github.com/MiCHiLU/erlang_websocket

WebKitでコネクションを張れることを確認してます。
pywebsocketを活用させていただきました。ありがとうございます!

--
Takanao Endoh
http://www.MiCHiLU.com

Yuta Kitamura

unread,
Jun 22, 2010, 12:20:42 AM6/22/10
to html5-dev...@googlegroups.com
こんにちは、北村です。


記事で記述されていらっしゃる、
> NOTE: I am not sure why Sec- ...
この部分に付いては私もとても不思議に思っています。Captchaのようなヘッダとbodyは本当に必要だったのか、と言う点に付いても。

現在策定中の XMLHTTPRequest のスペックでは、 Sec- で始まるヘッダはXHRから送出できないことになっています (http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method) 。悪意のある攻撃者がWebページを改竄してXHRからWebSocketサービスに接続するのを防ぎたいのだと思われます。現在どれだけのブラウザがこれを実装しているかはわかりませんが、少なくともWebKitは対応しているようです。

それと、新しいプロトコルで導入されたチャレンジとレスポンスですが、WebSocketに対応していない中間サーバなどがあったときに、ハンドシェイクを確実に失敗させるために導入されたようです。

テストしてる際に少し気になった点は、
http://github.com/nori0428/mod_websocket/issues#issue/2
こういった所でしょうか。

Chrome のバグのように思われるので、もしよければ http://crbug.com/new からバグをファイルしていただけますか? よろしくお願いします。

Yuta

Norio Kobota

unread,
Jun 24, 2010, 10:42:10 AM6/24/10
to html5-developers-jp
北村さん、ごめんなさい。
間違えてメールしてしまったみたいです。。。

レポートはあげておきました。よろしくお願いいたします。
> > > > > > このグループから退会するには、html5-developer...@googlegroups.com<html5-devel opers-jp%2Bunsu...@googlegroups.com>にメールを送信してください。
> > > > > > 詳細については、http://groups.google.com/group/html5-developers-jp?hl=ja
> > からこのグループにアクセスしてください。
>
> > --
> > このメールは Google グループのグループ「html5-developers-jp」の登録者に送られています。
> > このグループに投稿するには、html5-dev...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、html5-developer...@googlegroups.com<html5-devel opers-jp%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/html5-developers-jp?hl=jaからこのグループにアクセスしてください。
Reply all
Reply to author
Forward
0 new messages