【问题标题】:How to get response from other user after joining room using socket.io使用socket.io加入房间后如何获得其他用户的响应
【发布时间】:2015-10-21 12:55:19
【问题描述】:

我对 socket.io 有一个疑问。我有两种类型的用户 i.e-admin,client。第一个管理员将创建用户 ID 并加入房间。我需要当用户加入房间时管理员应该得到回复并需要有关此的帮助.

我的工作代码如下。

server.js:

var port=8888;
var express=require('express');
var morgan = require('morgan');
var http=require('http');
var bodyParser= require('body-parser');
var methodOverride = require('method-override');
var mongo = require('mongojs');
var database='Oditek';
var collections=['video'];
var app= express();
var server=http.Server(app);
var io=require('socket.io')(server);
var db = mongo.connect("127.0.0.1:27017/"+database, collections);
app.use(express.static(__dirname + '/public'));     // set the static files location /public/img will be /img for users
app.use(morgan('dev'));                     // log every request to the console
app.use(bodyParser.urlencoded({ extended: false }))    // parse application/x-www-form-urlencoded
app.use(bodyParser.json())    // parse application/json
app.use(methodOverride());                  // simulate DELETE and PUT
db.on('ready', function () {
    console.log('database connected')
});
app.get('/',function(req,res){
    res.sendfile('view/login.html');
});
app.post('/login',function(req,res){
    var username=req.body.username;
    var password=req.body.userpassword;
    if(username && password){
        db.video.findOne({
            username:username,
            password:password
        },function(err,doc){
            if(doc){
                console.log('login',doc);
                res.send(doc);
            }
            if(err){
                console.log('login12',err);
                res.send("could not login");
            }
        });
    }
});
app.get('/video',function(req,res){
    res.sendfile('view/video.html');
});

//socket----programming//
var roomid;
io.on('connection',function(socket){
    //console.log(socket);
    roomid=socket.handshake.query.roomid;
    var usertype=socket.handshake.query.usertype;
    socket.join(roomid);

});
server.listen(port);
console.log('server is listening on the port'+port);

我的客户端代码如下。

function videoBroadCasting(uType){
    var messageGateWay;
    if(uType=='admin'){
        var userid = getRandomString();
        $('#styled').val('http://localhost:8888/video?usertype=client & id='+userid);
        messageGateWay=io('http://localhost:8888/?roomid='+userid+'usertype='+uType);
    }
    if(uType=='user'){
        messageGateWay=io('http://localhost:8888/?usertype='+uType);
    }
    messageGateWay.on('connect',function(){
        console.log('socket get connected');

    });
}
function getRandomString() {
   return (Math.random() * new Date().getTime()).toString(36).replace(/\./g, '');
}
function getQuery(key){
        var temp = location.search.match(new RegExp(key + "=(.*?)($|\&)", "i"));
        if(!temp) return;
        return temp[1];
}

客户加入房间后,管理员应该会收到一条通知。请帮我这样做。

【问题讨论】:

    标签: javascript node.js socket.io socket.io-1.0


    【解决方案1】:

    一个简单的解决方案是当管理员加入房间时将来自管理员的套接字对象保存在服务器中。然后,当其他用户加入房间时,只需从 admin/admins 向该套接字发送一条消息。只需与实际登录房间的管理员保持数组更新即可。

    类似:

    var socketAdmin = {};
    io.on('adminJoins',function(socket){
      socketAdmin = socket;
      roomid=socket.handshake.query.roomid;
      var usertype=socket.handshake.query.usertype;
      socket.join(roomid);
    });
    io.on('clientJoins',function(socket){
      roomid=socket.handshake.query.roomid;
      socketAdmin.emit('newClient', {socketClient: socket, roomId: roomid};
      var usertype=socket.handshake.query.usertype;
      socket.join(roomid);
    });
    

    在此示例中,如果您是管理员,客户端会发送消息“adminJoins”,或者如果您是客户端,则发送“clientJoins”,您可以发送该消息以检查您拥有的 uType var。如果有新客户加入房间,管理员会收到带有客户套接字和 roomId 的“newClient”消息(只是一个示例)。

    【讨论】:

    • 添加了一些代码来更好地解释自己,希望对您有所帮助
    • 好的,我会试试这个,稍后告诉你。
    • socket 将只保存来自客户端/管理员的消息。它将是roomid=socket.handshake.query.roomid;
    猜你喜欢
    • 2015-07-28
    • 2021-10-28
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2018-03-22
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多