Python の WebSocket ライブラリの Autobahn と ws4py は、テキストフレームを受信した時にその内容が正しい UTF-8 になっているかどうかをバリデートしています。
このバリデートが1バイトずつの処理を Python でやっているために、 PyPy を使ってない場合は結構重くて、メッセージ量が大きい時に簡単にボトルネックになってしまいます。
そこでこのバリデートを Cython でやる wsaccel を作りました。
pip install wsaccel
でインストールできます。 ws4py を使う場合は import wsaccel; wsaccel.patch_ws4py()
で ws4py の中の Utf8Validator を Cython 版に置き換えます。
WebSocket の典型的な利用方法だとJSONを転送したりすると思うのですが、このパッチを使うことで WebSocket の処理よりも JSON のデコードの方が圧倒的に重くなります。
これでも遅い場合はJSONの処理に ujson 使うとか、json やめて msgpack の採用を検討してください。
(追記: Utf8Validator 以外にも高速化ポイントが見つかったため、パッケージ名を wsaccel に変更しました)