Hatena::ブログ(Diary)

kazuhoのメモ置き場

2014-02-21

WebSocketsでの送信処理に関する注意点(CLOSINGステートとcloseイベントに関する疑問)

WebSocketsの接続状態には、CONNECTING / OPEN / CLOSING / CLOSEDのステートが定められている。

一方、CLOSING状態への遷移に対応するイベントは存在せず、CLOSE状態へ遷移した際にcloseイベントが発生するとされている。

つまり、「closeイベントが来るまでは送信できるぜー」ってなコードを書いてると、正常系なのにsend()で例外発生する可能性がある。

なので、面倒だけど、

if (ws.readyState == 1) {
    ws.send(...);
}

のようなガードを入れる必要がある*1。もしくは、ws.readyState == CLOSING 状態になったらcloseイベントのハンドラを呼び出すようなラッパーを書く必要がある。

と、以上の結論に至ったんですが、あってますでしょうか? >識者


以下、規格からの引用。

CONNECTING (numeric value 0)

  The connection has not yet been established.

OPEN (numeric value 1)

  The WebSocket connection is established and communication is possible.

CLOSING (numeric value 2)

  The connection is going through the closing handshake, or the close() method has been invoked.

CLOSED (numeric value 3)

  The connection has been closed or could not be opened.

When the WebSocket closing handshake is started, the user agent must queue a task to change the readyState attribute's value to CLOSING (2). (If the close() method was called, the readyState attribute's value will already be set to CLOSING (2) when this task runs.)

When the WebSocket connection is closed, possibly cleanly, the user agent must queue a task to run the following substeps:

  1. Change the readyState attribute's value to CLOSED (3).

  (略)

  3. Create an event that uses the CloseEvent interface, with the event type close, ...

*1:全二重なプロトコルなので、else節は不要で問題ないはず

通りすがり通りすがり 2014/02/21 21:12 sendの項目を見るとエラーになるのはCONNECTINGの時のみで、
その後CLOSINGやCLOSEDになっていたときに呼ばれた場合は
またOPENになるまでバッファリングされるのではないでしょうか?

kazuhookukazuhooku 2014/02/25 12:10 コメントありがとうございます。いったん閉じたソケットを再度開くのってどうやればいいんでしょう?

davedave 2016/08/29 20:50 nice site
http://www.shirasmane.com/buy-tumblr-followers-get-guaranteed-cheapest-price

davedave 2016/08/29 20:50 nice site
http://www.shirasmane.com/buy-tumblr-followers-get-guaranteed-cheapest-price

Buy Mixcloud FollowersBuy Mixcloud Followers 2016/09/21 15:19 Buy Mixcloud Followers

Buy Mixcloud FollowersBuy Mixcloud Followers 2016/09/21 15:19 Buy Mixcloud Followers

Buy Mixcloud FollowersBuy Mixcloud Followers 2016/09/21 15:19 Buy Mixcloud Followers

Buy Youtube ViewsBuy Youtube Views 2016/09/22 15:32 nice post....

buy tumblr followersbuy tumblr followers 2016/10/06 16:45 Hi...... like this topic very much.......Keep on posting more of such updates……
<a href="">buy tumblr followers</a>

buy tumblr followersbuy tumblr followers 2016/10/06 16:51 buy tumblr followers

buy tumblr reblogsbuy tumblr reblogs 2016/10/18 16:21 nice post

BuyFollowers24X7.comBuyFollowers24X7.com 2016/10/22 19:06 Hi...... like this topic very much.......Keep on posting more of such updates……

buy tumblr followersbuy tumblr followers 2016/10/25 19:34 Hi...... like this topic very much.......Keep on posting more of such updates……

skypeskype 2017/04/14 13:55 一方、CLOSING状態への遷移に対応するイベントは存在せず、CLOSE状態へ遷移した際にcloseイベントが発生するとされている。

hotmail.comhotmail.com 2017/04/14 13:56 と、以上の結論に至ったんですが、あってますでしょうか? >識者

animal jamanimal jam 2017/07/11 13:45 The article you have shared here very good. This is really interesting information for me. Thanks for sharing!
http://hotmailsign-login.com/
http://hotmailsign-login.com/hotmail-sign-in/
http://freehotmail.info/

Counter StrikeCounter Strike 2017/09/03 17:32 Really nice article. I like this blog very much.

quickpayportalquickpayportal 2017/09/03 19:47 Thanks for sharing this nice post.

facebook full websitefacebook full website 2017/11/27 16:41 私はこの記事からより有用な情報を持っています。 共有してくれてありがとう。

windows 10 product keywindows 10 product key 2018/05/30 19:08 I have more useful information from this article. Thanks for sharing.

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kazuhooku/20140221/1392965892