Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2010-10-21

Plack::Middleware::WebSocket というのを作りました

| 21:46 |  Plack::Middleware::WebSocket というのを作りました - NaN days を含むブックマーク はてなブックマーク -  Plack::Middleware::WebSocket というのを作りました - NaN days

http://github.com/motemen/Plack-Middleware-WebSocket

Twiggy で WebSocket (draft-ietf-hybi-thewebsocketprotocol-00) のサーバサイド実装 - NaN days - subtechPlack のミドルウェアにしてみたやつです。どうせまた仕様が変わるんでしょうけど、軽く WebSocket を試してみたい時に楽です。

(こういうやり方でよいのか分かりませんが) $env->{'websocket.impl'} に Plack::Middleware::WebSocket::Impl のインスタンスが入っていて、こいつを介してハンドシェイクをおこなうことができます。成功すると $fh が返ってくるので、ここから AnyEvent::Handle を作るなどして通信できます。失敗した場合はなんとなくそれっぽいエラーコードが error_code に入ります。

    ...
    elsif ($req->path eq '/echo') {
        if (my $fh = $env->{'websocket.impl'}->handshake) {
            return start_ws_echo($fh);
        }
        $res->code($env->{'websocket.impl'}->error_code);
    }
    ...

1 秒遅れで返事が返ってくるエコーサーバのサンプルが付属しているので、plackup -Ilib eg/echo/app.psgi とし、Google Chrome 6 なんかでアクセスしてみて下さい。おまけで AnyEvent::Handle の WebSocket メッセージ用の reader/writer もついてます。詳しくは eg/echo/app.psgi をご覧ください。