简体   繁体   English

Socket.io发送到特定客户端

[英]Socket.io sending to specific client

could anybody tell me why I'm getting an undefined response? 有人可以告诉我为什么我得到不确定的答复吗?

It's definitely saving the socket.io socket ID, as I've checked. 正如我已经检查过的,它肯定是保存了socket.io套接字ID。 The typeof the response is "undefined". 响应的类型为“未定义”。 It's successfully connecting, as I can see it on the server code (main.js), and I can see the uuid as well as the socket id. 它成功连接,正如我在服务器代码(main.js)上看到的那样,并且可以看到uuid和套接字ID。

main.js main.js

'use strict';
var uuid = require('node-uuid');
var fs = require('fs');
var fse = require('fs-extra');
var rimraf = require('rimraf');
var socketio = require('socket.io')();

var cnf = require('./config.js');

var myId = uuid.v4();
var connectedWorkers = {};

if (!fs.existsSync('runtime')) {
    console.log("runtime directory cannot be found");
}

rimraf.sync('runtime/generated');
fs.mkdirSync("runtime/generated", function(err){
    if(err){ 
        console.log(err);
        response.send("ERROR! Can't make the directory! \n");    // echo the result back
    }
});

socketio.on('connection', function(socket){
    console.log('connection!');
    var newId = uuid.v4();
    connectedWorkers[newId] = socket.id;
    socketio.sockets.in(connectedWorkers[newId]).emit("test", {asd:"asdasd"});
    console.dir(connectedWorkers);
});
socketio.listen(3000);

client.js client.js

'use strict';

var cnf = require('./config.js');

var socket = require('socket.io-client')(cnf.serverURL);

socket.on('connect', function(data){
    console.log(data);
    socket.on('event', function(data){
    });
    socket.on('disconnect', function(){});
});

It's simply because you're logging wrong. 这仅仅是因为您输入错误。

socket.on('connect', function(data){    // this 'connect' event have no parameter. Just function()
    console.log(data);                  // therefore 'data' here will be 'undefined'
});

socket.on('test', function(data){
    console.log(data);                  // this will return {asd:"asdasd"} as you emitted this.
});

You can call emit directly on your sockets : 您可以拨打emit直接在插座:

socketio.on('connection', function(socket){
    socket.emit("test", {asd:"asdasd"});
});

You can try to listen test event on the client side: 您可以尝试在客户端监听test事件:

'use strict';

var cnf = require('./config.js');

var socket = require('socket.io-client')(cnf.serverURL);

socket.on('test', function(data){
    console.log(data.asd);  //should print "asdasd"
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM