如何测试我用 JavaScript 开发的 WebSocket [英] How do I test my WebSocket which is developed in JavaScript

查看:27
本文介绍了如何测试我用 JavaScript 开发的 WebSocket的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have created WebSocket.js but unfortunately I am unable to test it due to unavailability of data. The requirement is the data comes from various sources so I have multiple sockets for that. Note: I want to particularly test my socket.onMessage behaves for different sockets. Please find the code snippet below:

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.org Echo 测试 创建您自己的测试

You can test WebSocket using websocket.html at websocket.org Echo Test Creating your own test

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

Using a text editor, copy the following code and save it as websocket.html somewhere on your hard drive. Then simply open it in a browser. The page will automatically connect, send a message, display the response, and close the connection.

请参阅Linux - WebSocket 测试错误.

这篇关于如何测试我用 JavaScript 开发的 WebSocket的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆