0

Websocket を使用して単純なエコー サーバーを構築しようとしていますが、エラーが発生する前に接続を維持できるのは数秒間だけです。Websocket を閉じる理由は「無効な UTF-8 バイト」ですが、これらの無効なバイトがどこから来ているのかわかりません。ここに私のウェブソケットクライアントがあります:

// websocket-client.es6
this.ws = new WebSocket(`ws://localhost:8080/websocket-test/ws`);
this.ws.onopen = (event) => {
  this.ws.send('opening');
  setInterval(() => {
    this.ws.send('heartbeat');
  }, 5000);
};
this.ws.onmessage = (event) => {
  console.log(event);
};
this.ws.onclose = (event) => {
  console.log('websocket closing: %O', event);
};
this.ws.onerror = (event) => {
  console.error('error: %O', event);
}

私のサーバーは ws4py を使用した Cherrypy です。

# websocket-server.py
class MyWebSocket(WebSocket):
    def received_message(self, message):
        cherrypy.log('received %s' % message)
        self.send(message.data, message.is_binary)

    def closed(self, code, reason=None):
        cherrypy.log('closed. code %s, reason: %s' % (code, reason))

アプリを実行すると、サーバー側で次のようになります。

[10/Feb/2016:16:39:42]  received opening
[10/Feb/2016:16:39:47]  received --heartbeat--
[10/Feb/2016:16:39:52]  received --heartbeat--
[10/Feb/2016:16:39:57]  received --heartbeat--
[10/Feb/2016:16:40:02]  received --heartbeat--
[10/Feb/2016:16:40:07]  received --heartbeat--
[10/Feb/2016:16:40:12]  received --heartbeat--
[10/Feb/2016:16:40:17]  received -heLrtbHat-5
[10/Feb/2016:16:40:22]  received -heLrtbHat-

最後の 2 つのメッセージにも、2 番目のダッシュの後に白い四角形があります。

これは、Chrome Dev Tools コンソールの内容です。

MessageEvent { data: "opening", type: "message" }
websocket closed: CloseEvent { code: 1007, reason: "Invalid UTF-8 bytes", type: "close" }

これらの無効なバイトはどこから来ているのでしょうか? 私がしているのは、通常のテキストを送信することだけのようです。ありがとう。

4

1 に答える 1

0

あなたの websocket-server.py で

次の行があります。

self.send(message.data, message.is_binary)

したがって、サーバーはバイナリ メッセージを送り返していると考えているように見えますが、chrome はテキストを予期しています。

試す:

self.send(message.data, message.is_text)
于 2016-02-08T22:45:11.120 に答える