带有二进制数据的Elm WebSocket

时间:2017-03-31 07:54:09

标签: sockets elm

我需要使用带有二进制数据的套接字,因此我将Evan的库复制到我的源代码中并将本机代码破解为

 socket.addEventListener("message", function(event) {
        var reader = new FileReader();
        console.log("** onmessage");

        try {
            reader.readAsArrayBuffer(event.data);
        } catch (e) {
            console.error(e)
        }

        reader.addEventListener("loadend", function(event) {
            // ArrayBuffer
            let record = msgpack.decode(new Uint8Array(event.target.result));
            let recordString = JSON.stringify(record.NewRecords[0].Record);
            _elm_lang$core$Native_Scheduler.rawSpawn(A2(settings.onMessage, socket, recordString));
        });
    });

我有三个问题错误:

  • 我在Elm中获得的回调少于** onmessage logs
  • 对于较大的消息,我得到了我期望的** onmessage日志的一小部分
  • 我没有收到任何后续消息

对于第一个,我认为上面的闭包会在每次有消息时创建一个新的文件读取器实例(事实上我没有得到关于文件读取器忙的错误)。当我构建一些连接到端口的简单js套接字处理代码时,这样的代码工作正常。

对于第二个,看起来套接字正在完全失去对消息的跟踪。我想知道在新的关闭中是否存在_elm_lang$core$Native_Scheduler.rawSpawn(A2(settings.onMessage, socket, recordString));的问题,导致socket的价值出现某种竞争条件?

更新 使用开发控制台我可以看到我第一次点击rawSpawn行socket.readyState == 1(打开)但之后socket.readyState == 3(即关闭)。我没有任何关闭它的代码。

0 个答案:

没有答案