gpt4 book ai didi

javascript - 使用socket.io加入房间后如何获得其他用户的响应

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:33 25 4
gpt4 key购买 nike

我对socket.io有一个疑问。我有两种类型的用户即管理员,客户端。第一个管理员将创建用户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];
}

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

最佳答案

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

类似于:

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 变量。如果有新客户端加入房间,管理员会收到一 strip 有客户端套接字和 roomId 的“newClient”消息(仅作为示例)。

关于javascript - 使用socket.io加入房间后如何获得其他用户的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31719159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com