Socket.io 套接字io客户端连接两次
当我的socket io客户端连接到服务器时,它会执行两次 这是一个angular 2项目,因此我使用typescript编写代码,如您所见:Socket.io 套接字io客户端连接两次,socket.io,typescript,angular,Socket.io,Typescript,Angular,当我的socket io客户端连接到服务器时,它会执行两次 这是一个angular 2项目,因此我使用typescript编写代码,如您所见: 类服务器{ 私有app=express(); 私有httpServer=http.createServer(this.app); 私有io=sio.listen(this.httpServer); 私有用户=数组(); 构造函数(){ //routage sur index.html this.app.get(“/”,(req,res)=>{ res
类服务器{
私有app=express();
私有httpServer=http.createServer(this.app);
私有io=sio.listen(this.httpServer);
私有用户=数组();
构造函数(){
//routage sur index.html
this.app.get(“/”,(req,res)=>{
res.sendFile(uu dirname+'/index.html');
});
//独立学院
this.app.use(express.static(_dirname+'/');
//连接与解除连接
this.io.on('连接',(套接字:SocketIO.socket)=>{
变量日期=新日期();
log(date+':用户连接'+socket.id');
socket.on('broadcast users srv',(user)=>{
var b=新分支();
var n=新NVNode(b);n.image\u path=用户。\节点。\图像\路径;
var u=新用户(用户。\邮件,用户。\ id,n);
u、 socket=socket.id;
这个.users.push(u);
socket.broadcast.emit('broadcast users clt',u)
});
});
}
}
此.s
在此.io
收到连接事件之前未初始化。如果这是您正在初始化的唯一位置,您只能在连接时订阅this.s
从
this.io.on('connection', (sock: SocketIO.Socket) => {
var date = new Date();
console.log(date+' : a user connected '+sock.id);
this.s = sock;
});
this.s.on('broadcast users srv',(user) => {
var b = new Branch();
var n = new NVNode(b);n.image_path = user._node._image_path;
var u = new User(user._mail,user._id,n);
u.socket = this.s.id;
this.users.push(u);
this.s.broadcast.emit('broadcast users clt',u)
});
到
可能会成功。您正在尝试在初始化前使用s
。通过将this.s.on
调用移动到this.io.on
回调中,您将确保s
不是未定义的
class Server {
private app = express();
private httpServer = http.createServer(this.app);
private io = sio.listen(this.httpServer);
private users = Array<User>();
private s : SocketIO.Socket
constructor() {
//routage sur index.html
this.app.get('/',(req, res) => {
res.sendFile(__dirname + '/index.html');
});
//ajout des dépendences
this.app.use(express.static(__dirname + '/'));
//connexion & deconnexion
this.io.on('connection', (sock: SocketIO.Socket) => {
var date = new Date();
console.log(date+' : a user connected '+sock.id);
this.s = sock;
this.s.on('broadcast users srv',(user) => {
var b = new Branch();
var n = new NVNode(b);n.image_path = user._node._image_path;
var u = new User(user._mail,user._id,n);
u.socket = this.s.id;
this.users.push(u);
this.s.broadcast.emit('broadcast users clt',u)
});
});
}
}
类服务器{
私有app=express();
私有httpServer=http.createServer(this.app);
私有io=sio.listen(this.httpServer);
私有用户=数组();
私人s:SocketIO.Socket
构造函数(){
//routage sur index.html
this.app.get(“/”,(req,res)=>{
res.sendFile(uu dirname+'/index.html');
});
//独立学院
this.app.use(express.static(_dirname+'/');
//连接与解除连接
this.io.on('连接',(sock:SocketIO.Socket)=>{
变量日期=新日期();
log(date+':一个连接'+sock.id'的用户);
这个.s=袜子;
this.s.on('broadcast users srv',(user)=>{
var b=新分支();
var n=新NVNode(b);n.image\u path=用户。\节点。\图像\路径;
var u=新用户(用户。\邮件,用户。\ id,n);
u、 socket=this.s.id;
这个.users.push(u);
this.s.broadcast.emit('broadcast users clt',u)
});
});
}
}
是的,但是如果我这样做,我有两个来自客户端的连接,主要问题是双重连接,并且此代码确实连接了客户端两次
class Server {
private app = express();
private httpServer = http.createServer(this.app);
private io = sio.listen(this.httpServer);
private users = Array<User>();
private s : SocketIO.Socket
constructor() {
//routage sur index.html
this.app.get('/',(req, res) => {
res.sendFile(__dirname + '/index.html');
});
//ajout des dépendences
this.app.use(express.static(__dirname + '/'));
//connexion & deconnexion
this.io.on('connection', (sock: SocketIO.Socket) => {
var date = new Date();
console.log(date+' : a user connected '+sock.id);
this.s = sock;
this.s.on('broadcast users srv',(user) => {
var b = new Branch();
var n = new NVNode(b);n.image_path = user._node._image_path;
var u = new User(user._mail,user._id,n);
u.socket = this.s.id;
this.users.push(u);
this.s.broadcast.emit('broadcast users clt',u)
});
});
}
}