wsaccel で、 UTF-8 のバリデートだけでなく、同じく1バイトずつの処理である mask も Cython で実行するようになりました。
UTF-8 のバリデートはテキストフレームのみに行われる処理であり、JSONをバイナリだと言って転送してバリデートをJSONデコーダに頼るなどの回避方法があったのに対して、マスクはクライアントが送信するフレームは基本的に全て行うのでバイナリフレームにも効果があります。
Autobahn で、1000バイトのデータを1000回、ループバックアダプタ経由でechoサーバーに送信してレスポンスを受信するという動作を繰り返すのにかかる時間を計測しました。
Autobahn | 1.37169098854 sec |
---|---|
Autobahn+wsaccel | 0.194823980331 sec |
1000バイトの1メッセージを1往復するのに1ms以上かかっていたのが、1/6以下の時間になりました。