[Q&A]WebSocketのオープンに時々失敗

384 views
Skip to first unread message

野尻佳志

unread,
Sep 24, 2015, 10:28:47 AM9/24/15
to SkyWay Technical Forum
野尻です。

すみません、Peerjsを使ったWebRTC開発をしていて、非常に行き詰ったので教えて頂ければ幸いです。
ただ、Skywayサーバでは問題なく動作していて、PeerjsサーバでWebSocketのオープンが時々失敗します。

OSSのPeerJSで最初のnew Peerでは時々失敗すると思っています。(勘違いならすみません。)
原因はわかっていませんが、

Clientでnew Peerを発行するとクライアントライブラリ内で処理されSocketが実行されその中で

・XMLHttpRequest
・WebSocket

の2つをサーバとコネクション確立しようとしていると思います。
WebSocketのオープンに失敗なのですが、XMLHttpRequest で2000Byteの”00”を送信した時に
WireSharkではフラグメントパケットを送信しているのですが、

XMLHttpRequest で onreadystatechange:3 を3回程度も受信

しているように見えていてこれが問題だと思っています。(PeerJSサーバで)
同じクライアントライブラリでも、Skywayサーバでは1回のみ受信しています。
(サーバ側のパケットの送出内容に問題があると想定していますが、原因がわかりません。)

Skywayサーバ側の処理(コネクション確立処理で)を何か修正されていると思っていますが、
何かバグが改修されているようなことがあれば教えて頂ければ非常に助かります。
(SkywayはSSLなのでパケットは見えませんので、何が変わっているのかはわかっていません。)
本件はSkywayのことではないので、お答えできないということであれば、その旨を返信頂ければ幸いです。

すみませんが、よろしくお願いします。

iwase.yoshimasa

unread,
Sep 24, 2015, 8:44:06 PM9/24/15
to SkyWay Technical Forum
野尻さま

SkyWay開発チームの岩瀬です。

SkyWayで提供しているシグナリングサーバは、
PeerJSサーバとインターフェースを互換しているものの、別開発しているサーバになります。
そのため、PeerJSサーバ側の改修についてはお答えできかねる状況です。

なお、PeerJSサーバでも、onreadystatechangeが複数回発生することを確認しております。

野尻佳志

unread,
Sep 25, 2015, 1:35:26 AM9/25/15
to SkyWay Technical Forum

野尻です。

返信ありがとうございました。

よろしくお願いします。

野尻佳志

unread,
Sep 25, 2015, 5:06:33 AM9/25/15
to SkyWay Technical Forum
野尻です。

追加で申し訳ありませんが、OSSのPeerJSのそのままでもWebSocket のOpenに
失敗することがあると思っております。(勘違いならすみません。)

その点で、もし情報共有頂く事があれば頂ければ幸いです。
特になければ、飛ばしてください。
すみませんが、よろしくお願いします。

iwase.yoshimasa

unread,
Sep 25, 2015, 5:21:08 AM9/25/15
to SkyWay Technical Forum
SkyWay開発チームの岩瀬です。

OSSのPeerJSで検証を重ねているわけではないため、
追加での情報提示が難しい状況です。

お力になれず申し訳ございません。

野尻佳志

unread,
Sep 25, 2015, 6:24:55 AM9/25/15
to SkyWay Technical Forum
再度の返信ありがとうございます。
ご迷惑をおかけいたしました。

ありがとうございました。 

Yusuke Naka

unread,
Sep 28, 2015, 2:10:56 AM9/28/15
to skyw...@googlegroups.com
野尻様

SkyWay開発チームの仲です。

関係ないかもしれませんが、SkyWay版のPeerJSを利用する上での注意点を1つシェアさせて頂きます。
SkyWayではClientとサーバが定期的にPing/Pongしています。(本家のPeerServerやPeerjSには無い仕様)
SkyWay版PeerJSは、サーバからのPingが最長45秒以上なければ、WSSを切断します。
もし、SkyWay版PeerJSをOSSのPeerServerで利用する場合は、以下のように new Peer()のオプションとして、hostを指定して下さい。

 var peer = new Peer({ host: 'localhost', key: 'peerjs', debug: 3});

そうすれば、keepaliveが無効になります。
直接PeerJSを編集すると無効にはなりませんので、ご注意下さい。

また、WSSが切断される理由として、リバースプロキシサーバ(nginx等)のプロキシ設定なども考えられます。

参考になれば幸いです。


2015年9月25日 19:24 野尻佳志 <nojik...@gmail.com>:
再度の返信ありがとうございます。
ご迷惑をおかけいたしました。

ありがとうございました。 

--
このメールは Google グループのグループ「SkyWay Technical Forum」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには skywayjs+u...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/skywayjs/b02fac68-c7bd-4877-86b6-e50918d20d5c%40googlegroups.com にアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
仲 裕介(Yusuke NAKA)

野尻佳志

unread,
Sep 28, 2015, 10:34:42 PM9/28/15
to SkyWay Technical Forum
野尻です。

コメント大変ありがとうございます。
非常に参考になります。ご指摘の部分はその通りですだと思っております。

SkyWayさまのクライアントライブラリはコネクション確立後にご指摘のようには45秒の
タイマでKeepAliveをしてSocket.prototype._startWebSocket内で、以下のようにタイマー
を張られています。
    if (util.supportsKeepAlive) {
      self._setWSTimeout();
    }
サーバ側でもKeepAliveを各コネクションごとに確認が必要なのは理解しておりますので、
今は、この部分は今はコメントアウトしております。
今後、Skyway様のように、コネクションの生死の把握は必要だとは思っております。

ただ、今回は、WebSocketOpenイベントが上がってきませんので、コネクション確立前で
止まってしまっています。(XHRでは、onreadystatechange:4が上がってこない)
OSSのPeerJSのそのままでもコネクション確立が失敗する問題については、まだ、
理由がわかっておりません。(こちらでは、十回に一度程度は失敗しています。)
(WireSharkでサーバからのパケットはOK時とNG時で目視では差分(Tokenなど変わるので
100%同じかが不明)がので、タイミングなどにより失敗しているように見えています。)
XHRのonreadystatechange:3もパケットは一つ受信で何度もイベントがあがってくるようにも
見えていて何かおかしいと思っております。3:処理中なので100%おかしいわけではないですが。

こちらで調べた結果では、WebSocketやXHRのOSに近いところの基本機能で、タイミングにより
処理できない場合があるのではないかと想定しています。
こちらのサーバでSSL対応したところ、今のところ再現しなくなっているように見えております。
(開発しながら進めていますので確認中の段階です。)

SSLで発生しなくなるなら、商用では耐えれるので現在確認中です。
SkyWay様のサーバでは本問題が発生しないので、何に対処されたかと思って確認させて頂きました。
まだ、確認中ですが、SSLが結果的に解決策かもしれないと想定しております。
情報大変ありがとうございました。

今後とも、よろしくお願いします。


2015年9月28日月曜日 15時10分56秒 UTC+9 Yusuke NAKA:
Reply all
Reply to author
Forward
0 new messages