通过 WebSocket 将数据从 JS 客户端流式传输到 Go 服务器
Streaming data over WebSocket from JS client to Go server
背景
我打算通过 JS 客户端将 100x MB
或 GB
数据流式传输到 WebSocket 服务器。像这样 post:
Streaming data over WebSocket
但是我的服务器是用 Go 而不是 JS。我的意思是 https://github.com/gorilla/websocket
实现了一个 Go WebSocket 服务器
建议的一个选项是使用 BinaryJS:
Streaming data over WebSocket
问题
BinaryJS:服务端和客户端都是JS
服务器
var BinaryServer = require('../../').BinaryServer;
// Start Binary.js server
var server = BinaryServer({port: 9000});
客户
<script src="http://cdn.binaryjs.com/0/binary.js"></script>
<script>
// Connect to Binary.js server
var client = new BinaryClient('ws://localhost:9000');
问题
是否可以将 BinaryJS 与 Go 服务器一起使用?是否有等效的 Go 包?
对于 Float32Array
类型大于 200 MB
大小的数据从 JS 发送到 Go WebSocket 服务器,根本不需要流式传输,测试显示。
只需确保在 ws.send(positions);
之前使用 ws.binaryType = 'arraybuffer';
。
var positions = attrPos.array;
function connect() {
return new Promise(function(resolve, reject) {
var ws = new WebSocket('ws://127.0.0.1:8081/echo');
ws.onopen = function() {
resolve(ws);
};
ws.onerror = function(err) {
reject(err);
};
ws.onclose = function(evt) {
console.log("CLOSE SOCKET", new Date().toLocaleString());
};
ws.onmessage = function(evt) {
console.log("RESPONSE SOCKET: " + "RECEIVED" /* evt.data */, new Date().toLocaleString());
};
});
}
connect().then(function(ws) {
// onopen
console.log("OPENED SOCKET", new Date().toLocaleString());
console.log("SEND: START", new Date().toLocaleString());
ws.binaryType = 'arraybuffer'; // ** Critical statement
ws.send(positions);
ws.close();
}).catch(function(err) {
// onerror
console.log("ERROR: " + evt.data, new Date().toLocaleString());
});
背景
我打算通过 JS 客户端将 100x MB
或 GB
数据流式传输到 WebSocket 服务器。像这样 post:
Streaming data over WebSocket
但是我的服务器是用 Go 而不是 JS。我的意思是 https://github.com/gorilla/websocket
实现了一个 Go WebSocket 服务器建议的一个选项是使用 BinaryJS:
Streaming data over WebSocket
问题
BinaryJS:服务端和客户端都是JS
服务器
var BinaryServer = require('../../').BinaryServer;
// Start Binary.js server
var server = BinaryServer({port: 9000});
客户
<script src="http://cdn.binaryjs.com/0/binary.js"></script>
<script>
// Connect to Binary.js server
var client = new BinaryClient('ws://localhost:9000');
问题
是否可以将 BinaryJS 与 Go 服务器一起使用?是否有等效的 Go 包?
对于 Float32Array
类型大于 200 MB
大小的数据从 JS 发送到 Go WebSocket 服务器,根本不需要流式传输,测试显示。
只需确保在 ws.send(positions);
之前使用 ws.binaryType = 'arraybuffer';
。
var positions = attrPos.array;
function connect() {
return new Promise(function(resolve, reject) {
var ws = new WebSocket('ws://127.0.0.1:8081/echo');
ws.onopen = function() {
resolve(ws);
};
ws.onerror = function(err) {
reject(err);
};
ws.onclose = function(evt) {
console.log("CLOSE SOCKET", new Date().toLocaleString());
};
ws.onmessage = function(evt) {
console.log("RESPONSE SOCKET: " + "RECEIVED" /* evt.data */, new Date().toLocaleString());
};
});
}
connect().then(function(ws) {
// onopen
console.log("OPENED SOCKET", new Date().toLocaleString());
console.log("SEND: START", new Date().toLocaleString());
ws.binaryType = 'arraybuffer'; // ** Critical statement
ws.send(positions);
ws.close();
}).catch(function(err) {
// onerror
console.log("ERROR: " + evt.data, new Date().toLocaleString());
});