【问题标题】:How do I test my WebSocket which is developed in JavaScript如何测试用 JavaScript 开发的 WebSocket
【发布时间】:2015-11-12 20:41:07
【问题描述】:

我创建了 WebSocket.js,但不幸的是,由于数据不可用,我无法对其进行测试。要求是数据来自各种来源,因此我有多个套接字。注意:我想特别测试我的 socket.onMessage 对不同套接字的行为。请在下面找到代码sn-p:

var webSocket;
var txQueue = [];
var defaultReconnectTimeout = 1000; //will be multiplied by 2 and saved into reconnectTimeout on each try
var reconnectTimeout = defaultReconnectTimeout;

var registerWebSocketHandlers = function(webSocket) {
    webSocket.onclose = function(){
        setTimeout(service.reopen, reconnectTimeout *= 2);
    };

    webSocket.onopen = function(e) {
        reconnectTimeout = defaultReconnectTimeout; //reset this
        deferredSend();
    };

    webSocket.onerror = function(e) {
        throw new Error("[WebSocket] An error occured " + e);
    };
}

var uniqid = function() {
    return (new Date().getTime()).toString(16);
}


var deferredSend = function() {
    if(!service.isOpen()) {
        $timeout(deferredSend, 100);
        return;
    }
    while(txQueue.length && service.isOpen()) {
        var payload = txQueue.shift();
        webSocket.send(typeof payload === 'string' ? payload : JSON.stringify(payload));
    }
};

var createNewWebSocketInstance = function(apiUrl){
    var websocket = new $window.WebSocket(apiUrl);
    websocket.id = uniqid();
    return websocket;
}

// TODO: this is a bit hacky since we directly bind it to the raw window event
$window.onbeforeunload = function(e) {
    service.close();
};

var service = {};

service.setMessageEventHandler = function(name,cb) {
    instances[name].onmessage = function(msg) {
        if(msg.data.indexOf('Status: connected') === 0)
        {
            return;
        }

        var jsonObj = JSON.parse(msg.data);
        cb(jsonObj);
    };
};

service.isOpen = function() {
    return webSocket.readyState === 1;
};

service.send = function(msg) {
    txQueue.push(msg);
    deferredSend();
};

service.close = function() {
    return webSocket.close();
};

service.reopen = function() {
    // get old message handler
    var msgHandler = webSocket.onmessage;

    // try closing the previous WebSocket
    service.close();

    // open new WebSocket
    openConnection();

    // re-attach old handler to new WebSocket
    webSocket.onmessage = msgHandler;
};

service.getId = function() {
    return webSocket.id;
}

// Returns an already existing instance of the socket, if unavailable then creates a new one.      
service.getInstance = function(name, config) {
    if(!(name in instances)) {
        instances[name] = createNewWebSocketInstance(config);
    } 
    registerWebSocketHandlers(instances[name]);
    return instances[name];
};

return service;

【问题讨论】:

  • 我不确定我是否看到了可以在这里回答的问题...
  • 我正在寻找一种通过模拟多个 websocket 来测试此代码的方法
  • 嗯,到目前为止你尝试了什么?
  • 我想为一个套接字测试这个,但不确定是否有多个..

标签: javascript java angularjs sockets websocket


【解决方案1】:

您可以在websocket.org Echo Test Creating your own test 使用websocket.html 测试WebSocket

使用文本编辑器,复制以下代码并将其另存为 websocket.html 在您硬盘的某个位置。然后只需在浏览器中打开它。页面会自动连接,发送消息, 显示响应,然后关闭连接。

Linux - WebSocket test error

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 1970-01-01
    • 2023-04-10
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多