如何通过socket io发送对象数组?

时间:2016-11-24 18:31:54

标签: javascript node.js socket.io

我在发送对象数组时遇到了问题 socket io

我的服务器端代码

var addEntity = function(ent) {
    entityBag.push(ent);
};  
var entityBag = [];
addEntity(new Circle({
            x:  Math.random() * 5000,//(i%20) * space,
            y:  Math.random() * 5000,//Math.floor(i/20)*space,
            color: ['red', 'blue', 'green', 'yellow', 'purple', 'brown', 'violet'][Math.floor(Math.random()*7)],
            droplet: true  
        }));
socket.emit('updatePos',entityBag);

和我的客户端代码

var entityBag = [];
socket.on('updatePos', function(msg) {
    entityBag = msg;
});  

所以当我尝试调试问题时,客户端代码中的数组中的所有对象都是空的。所以我可能猜测错误是套接字

如果问题太琐碎,请原谅我的无知

Cirlce课程

function Circle(attr) {
    attr = attr    
    var x = attr.x;
    var y = attr.y;
    var color = attr.color ;
    var borderColor = attr.borderColor || 'black';
    var droplet  = attr.droplet ;
}

1 个答案:

答案 0 :(得分:0)

我无法看到您的整个代码,因此我无法在其中找到错误,但我尝试编写类似的内容:

server.js:

'use strict';
const io = require('socket.io')(3000);
var entityBag = []; 
var someObject = {
            x:  Math.random() * 5000,//(i%20) * space,
            y:  Math.random() * 5000,//Math.floor(i/20)*space,
            color: ['red', 'blue', 'green', 'yellow', 'purple', 'brown', 'violet'][Math.floor(Math.random()*7)],
            droplet: true
} 
var anotherObject = {
            name: 'Utsav Mangal',
            color: ['red', 'blue', 'green', 'yellow', 'purple', 'brown', 'violet'],
            human: true,
            somekey: 'foo'
} 
var addEntity = function(ent) {
    entityBag.push(ent);
};             
addEntity(someObject);
addEntity(anotherObject);
io.on('connection', function (socket) {
    socket.emit('updatePos', entityBag);    
});
console.log('Plain socket.io server started at port 3000');

client.js

'use strict';
const socket = require('socket.io-client')('http://localhost:3000');
socket.on('updatePos', function(data) {
    console.log(data);
});

您可以使用node server尝试启动服务器,node client连接到服务器,一切正常。你没有JSON.stringify / parse,socket.io会为你做。你的错误在别的地方。 请告诉我们整个代码。