在node.js上作为String发送的数组

时间:2013-05-13 07:06:51

标签: javascript node.js canvas socket.io

我正在尝试使用socket.io。我有一个成功将数据发送到服务器的画布,接收它很好。

它收到一个正确的Uint8ClampedArray,因为这就是发送的内容。

当我然后从服务器向客户端发送此消息时,我得到一个字符串:[object Object]。我再次检查了! 我错过了什么,服务器的代码如下:

var fs, http, io, server;
fs = require('fs');
http = require('http');
server = http.createServer(function(req, res) {
    return fs.readFile("" + __dirname + "/front.html", function(err, data) {
        res.writeHead(200, {
            'Content-Type': 'text/html'
        });
        return res.end(data, 'utf8');
    });
});
server.listen(1337);
io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
    socket.on('publish', function(message) {
         return io.sockets.send(message);
    });
});

2 个答案:

答案 0 :(得分:9)

在客户端:

var dataStr = JSON.stringify(data); // converts object to string

在服务器上:

var dataObj = JSON.parse(data); // converts string to object

答案 1 :(得分:2)

唯一的方法是在您的客户端大小中重用Uint8ClampedArray。如果你在服务器端有这个

var x = new Uint8ClampedArray(3);
x[0] = -17;
x[1] = 93;
x[2] = 350;
var dataThatWillBeSent = JSON.stringify(x);
// '{"0":0,"1":93,"2":255,"length":3,"byteLength":3,"byteOffset":0,"buffer":{"byteLength":3}}'

在您的客户端,假设您已包含Uint8ClampedArray,您可以执行此操作

var dataReceived = '{"0":0,"1":93,"2":255,"length":3,"byteLength":3,"byteOffset":0,"buffer":{"byteLength":3}}';
dataReceived = JSON.parse(dataReceived);
// reconstruct Uint8ClampedArray object

之前我没有使用Uint8ClampedArray,所以我不确切知道如何从JSON数据中恢复Uint8ClampedArray对象,但如果你阅读文档,你可能会想出一些东西< / p>