2016-02-08 2 views
0

Я пытаюсь создать простой сервер эха с помощью Websockets, но я могу получить соединение только в течение нескольких секунд, прежде чем я получу ошибку. Причина, по которой я получаю закрытие websocket, - «Недопустимые байты UTF-8», но я не уверен, откуда идут эти недопустимые байты. Вот мой WebSocket клиент:Websockets - Недействительные байты 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); 
} 

Мой сервер CherryPy с ws4py:

# 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- 

Последние два сообщения также имеют открытый прямоугольник после второй тире.

и это то, что Chrome Dev Tools консоль говорит:

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

Где могли эти недействительные байты будут приходить из? Похоже, что все, что я делаю, это отправка обычного текста. Благодарю.

ответ

0

В вашем websocket-server.py

У вас есть строка:

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

Так это выглядит, как сервер считает, что посылает обратно бинарное сообщение, но хром ожидает текст.

попробовать:

self.send(message.data, message.is_text) 
+0

Похоже, что это не так. Веб-узлы не работают в любом случае. – jay

Смежные вопросы