Sockets 具有二进制数据的Elm WebSocket
我需要使用带有二进制数据的套接字,因此我将Evan的库复制到了我的源代码中,并对本机代码进行了黑客攻击以进行读取Sockets 具有二进制数据的Elm WebSocket,sockets,elm,Sockets,Elm,我需要使用带有二进制数据的套接字,因此我将Evan的库复制到了我的源代码中,并对本机代码进行了黑客攻击以进行读取 socket.addEventListener("message", function(event) { var reader = new FileReader(); console.log("** onmessage"); try { reader.readAsArrayBuffer(event.data)
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
- 对于较大的消息,我得到了我期望的
日志的一小部分**onmessage
- 我没有收到任何后续消息
\u elm\u lang$core$Native\u Scheduler.rawsawn(A2(settings.onMessage,socket,recordString))是否有问题
在一个新的闭包中,导致套接字的值出现某种竞争条件
更新
使用开发控制台,我可以看到第一次点击rawsawn行时,
socket.readyState==1
(打开),但之后,socket.readyState==3
(即关闭)。我没有关闭它的任何代码。文件阅读器是否在正确的位置创建了对象?也许它应该在连接打开时创建,并在每条完整消息后归零。我认为这与套接字有关-请参阅我的更新