javascript - websocket javascript 读写

标签 javascript html 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 循环时它会卡住.... 有什么办法解决吗? >.< 谢谢!! 安德里亚

最佳答案

您以通常(在 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 的服务器。

即使这充满了异步调用,这并不意味着您的程序不会立即对消息的到来使用react(一旦您的其他函数停止工作,因为您只有一个线程)。

关于javascript - websocket javascript 读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137796/

相关文章:

javascript - 将 python 客户端服务器转换为 websocket

html - JavaScript:从 JavaScript 加载图像,然后等待该图像的 "load"事件

javascript - 增加和减少 SVG 形状 - JS

javascript - 如何清除 Canvas 以进行重绘

python - 使用 Python 和 websocket 创建实时聊天

php - 使用 Ratchet for PHP 通过 WebSocket 传输二进制数据

javascript - 诗农警报 stub : "Attempted to wrap alert which is already wrapped"

javascript - 使用不断变化的 HashMap 和 Nodejs 写入 Excel

javascript - 每个 ejs 渲染调用上的 "Default"参数?

html - 鼠标悬停时显示子子菜单