注意点
- pingと称して、JMeter側からたまに特定の文字列をSignalRで送信しないと通信が切断される。
- pingと称して、頻繁にSignalRからテキストフレーム通信が送信されてくるので、WebSocket Text Frame Filterでフレームを破棄する設定をいれておかないと、意図しない通信に反応してしまう。
- Azure SignalR Service特有なのかは分からないが、通信を確立するまでにプロトコルが存在する。
次の稿でそのプロトコルを記載する。
プロトコル
- Webscoket Samplers by Peter Doornboschプラグインをインストールする
- Azure FunctionsでNegotiate関数を作っている場合、Http SamplerでPOST呼び出しする
HTTP Header Mangerで以下を指定する。(この部分はまだ設定過不足の余地あり)
x-signalr-user-agent: JMeter
x-ms-signalr-userid: 通信を共有したいユーザーID名
ポストプロセッサーのJSON ExtractorでレスポンスのurlとaccessTokenを取得する - urlに対して、Http SamplerでPOST呼び出しする
HTTP Header Managerで以下のペアを登録する。
authorization: 1で取得したaccessToken
x-ms-signalr-userid: 1で指定したx-ms-signalr-useridと同じユーザーID
x-signalr-user-agent: JMeter
JSON ExtractorでconnectionIdを取得する - プラグインのWebSocket Open Connectionサンプラーでurlのドメインに対してwssで呼び出しを行う
HTTP Header Managerで以下のペアを登録する
Connection:Upgrade
Upgrade:websocket
Accept-Encoding:gzip,default,br
User-Angent:JMeter - プラグインのWebSocket Single Write SamplerでText Frameで「{"protocol":"json","version":1}」という書き込みを行う
- プラグインのWebSocket Single Read SamplerでSignalRからの通信を待つ