websocket javascript读写

时间:2012-06-21 12:07:05

标签: javascript html5 websocket

我试图为websocket创建一个Read \ Write函数,但我有一个问题......

var inarrivo = 0;
var risposta = "";

function RDW_Command(Stringa) {
    var Risposta = "";
    Stringa = "$" + Stringa;
    socket.send(Stringa);
    inarrivo = 0;
    while (inarrivo == 0) {
        doNothing();
    }
    return risposta;
}

function doNothing() {}
socket.onmessage = function (msg) {
    risposta = msg.data;
    inarrivo = 1;
};

问题是当它进入while循环时它会冻结.... 有什么想法解决它吗? >。<谢谢!! 安德烈

2 个答案:

答案 0 :(得分:5)

您可以使用常规(以javascript)基于事件/回调的方式在javascript中编写websockets。

以下是一个例子:

var somePackage = {};
somePackage.connect = function()  {
    var ws = new WebSocket('ws://'+document.location.host+'/ws');
    ws.onopen = function() {
        console.log('ws connected');
        somePackage.ws = ws;
    };
    ws.onerror = function() {
        console.log('ws error');
    };
    ws.onclose = function() {
        console.log('ws closed');
    };
    ws.onmessage = function(msgevent) {
        var msg = JSON.parse(msgevent.data);
        console.log('in :', msg);
        // message received, do something
    };
};

somePackage.send = function(msg) {
    if (!this.ws) {
        console.log('no connection');
        return;
    }
    console.log('out:', msg)
    this.ws.send(window.JSON.stringify(msg));
};

您致电somePackage.connect以打开连接。 之后,消息到达将在onmessage处理程序中处理,并向您刚刚调用somePackage.send的服务器发送消息。

即使这是完整的异步调用,这并不意味着您的程序不会立即对消息的到达做出反应(只要您的其他函数因为只有一个线程而停止工作)。 / p>

答案 1 :(得分:3)

这是一个无限循环:

inarrivo = 0;
while (inarrivo == 0) {
    doNothing();
}

解决方案是移除无限循环。