Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WebSocketのPing/Pongをプロトコル制御フレームの物で判別する #10969

Closed
u1-liquid opened this issue Jun 6, 2023 · 17 comments
Closed
Labels
✨Feature This adds/improves/enhances a feature

Comments

@u1-liquid
Copy link
Sponsor Contributor

What

https://developer.mozilla.org/ja/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#ping_%E3%81%A8_pong_websockets_%E3%81%AE%E9%BC%93%E5%8B%95

ハンドシェイク後の任意の時点で、クライアントまたはサーバーのどちらかが、相手に ping を送信することを選択できます。 ping が受信されると、受信者はできるだけ早く pong を返さなければなりません。 これを使用して、たとえばクライアントがまだ接続されていることを確認できます。

ping や pong は単なる通常のフレームですが、制御フレームです。ping のオペコードは 0x9、pong のオペコードは 0xA です。ping を取得したら、ping と同じペイロードデータを持つ pong を送ります(ping と pong の場合、最大ペイロード長は 125 です)。ping を送信することなく pong を取得することもできます。その場合はこれを無視してください。

参考

https://github.com/websockets/ws#how-to-detect-and-close-broken-connections

@u1-liquid u1-liquid added the ✨Feature This adds/improves/enhances a feature label Jun 6, 2023
@syuilo
Copy link
Member

syuilo commented Jun 9, 2023

これだとタブが表示されてなくてもコネクション生きてる判定になりそう

@syuilo
Copy link
Member

syuilo commented Jun 9, 2023

タブが非表示になってしばらくたったらコネクション切るコードをクライアント側に入れればいいか

@EbiseLutica
Copy link
Contributor

それ普通に不便そう 裏に回しててペコってなったら見に行く ができなくなる

@syuilo syuilo closed this as completed in 6182a1c Jun 9, 2023
@syuilo
Copy link
Member

syuilo commented Jun 9, 2023

なるほど

@CyberRex0
Copy link
Contributor

これどうにかならない?

@syuilo
Copy link
Member

syuilo commented Jun 10, 2023

どれ?

@CyberRex0
Copy link
Contributor

大規模でシビアなサーバではタイムアウト短くして、小規模のところでは余裕あるから比較的長めに、とかできるようにconfig.ymlで変えられるようにすればいいのではと思ったり

@syuilo
Copy link
Member

syuilo commented Jun 10, 2023

それは何のため?

@CyberRex0
Copy link
Contributor

Misskey開いて裏に回しといて、通知音が鳴ってから見に行く人が多いから
プッシュ通知は目障りになる場合がありそのような方法を取る人もいる(自分もそう)

@EbiseLutica
Copy link
Contributor

6182a1c では

タブが非表示になってしばらくたったらコネクション切るコードをクライアント側に入れればいいか

はやってないと思うから多分現状のdevelopで問題ないと思うんだけど、認識違うかしら

@syuilo
Copy link
Member

syuilo commented Jun 10, 2023

待って、現状何が問題になっているのか教えて欲しい

@EbiseLutica
Copy link
Contributor

@syuilo 多分

タブが非表示になってしばらくたったらコネクション切るコードをクライアント側に入れればいいか

って言ったあとにやるかやらないかのどっちを選択したか不明瞭なままissueが閉じられたので、最終的にどう実装されたのかわからず混乱している人がいる

@syuilo
Copy link
Member

syuilo commented Jun 10, 2023

ほむん
コミット見てもらえればわかるように現状 WebSocketのPing/Pongをプロトコル制御フレームの物で判別する しかやってない

@CyberRex0
Copy link
Contributor

バックグラウンドに回ったからって自動切断とかはしてないってこと?

@syuilo
Copy link
Member

syuilo commented Jun 10, 2023

してない

@tamaina
Copy link
Contributor

tamaina commented Jun 10, 2023

Safariはタブやウィンドウが表示されてないと積極的にWebSocketを切りに行く感じがする

@EbiseLutica
Copy link
Contributor

まあSafariだし(諦め)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature
Projects
None yet
Development

No branches or pull requests

5 participants