Tornado WebSockets - InvalidStateError Все още в състояние CONNECTING

Пиша в уеб приложение, където искам да изпратя JSON-код от страната на клиента към страната на сървъра през Tornado WebSockets с SSL. Когато искам да изградя връзка, Google Chrome показва в регистрационния файл на конзолата грешката:

Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING State. 

Моят python сървър изглежда така:

from tornado import websocket, web, ioloop
import json
from sqlite3functions import *


class SocketHandler(websocket.WebSocketHandler):
    def on_message(self, message):
        handleRequest(self, json.loads(message), True)
        print(message)

    def handleRequest(obj, message, isWebsock):
        ...


    def writeResponse(obj, message, isWebsock):
        if (isWebsock):
            obj.write_message(message)
        else:
            print(message)
            obj.write(message)
            print('msg sent')

app = web.Application([
  (r'/w', SocketHandler)
])

if __name__ == "__main__":
  app.listen(8888)
  ioloop.IOLoop.instance().start()

Моят клиент:

var ws;

function connect() {
 ws = new WebSocket('wss://127.0.0.1:8888/w');
 ws.onopen = function()
 {
   ws.send("Message to send");

 };                     
}


$(document).ready(function() {  
    connect();

    $("#Button").on('click', function() {
        ...      
        ws.send(data);
    });
});

Благодаря


person user3086983    schedule 27.05.2014    source източник


Отговори (1)


Не позволявайте на вашия сокет да изпраща данни, докато състоянието му на готовност не бъде свързано.

Тези функции могат да помогнат:

function sendMessage(msg) {
        waitForSocketConnection(nvWS, function() {
            ws.send(msg);
        });
    };


function waitForSocketConnection(socket, callback){
        setTimeout(
            function(){
                if (socket.readyState === 1) {
                    if(callback !== undefined){
                        callback();
                    }
                    return;
                } else {
                    waitForSocketConnection(socket,callback);
                }
            }, 5);
    };
person Benjamin Trent    schedule 28.05.2014