为什么套接字io客户端两次发送连接消息

时间:2018-08-17 11:51:22

标签: socket.io angular6 passport.socketio

我正在使用angular 6客户端构建服务器,作为服务器的一部分,我需要使用Socket io构建博客。 这是我在服务器中的套接字io代码

io.on('connection', function (socket) {
        if(!socket.request.user.logged_in)
           socket.disconnect();
        console.log("made a connection");
        console.log(socket.request.user);

        socket.on('join',async function (data) {
            if(await Blogs.IsUserInBlog(socket.request.user.email,data.room))
                socket.join(data);
        });

        socket.on('post',function (data) {
            Blogs.ADDPOST(data.msg,socket.request.user.email,data.room);
            io.to(data.room).emit('post',{msg:data.msg,user:socket.request.user.email});
        });
}

我还需要查看用户数据(登录后),正如您在上面的代码中看到的那样,我使用了socket.request.user变量,因为我使用了password-socket.io,这是该代码< / p>

io.use(passportSocketIo.authorize({
        secret: 'IHopeThisWorks',
        store: new MongoDB({ url: 'mongodb://localhost/BookShop'}),
        success: function(data, accept){
            console.log('successful connection to socket.io');
            accept(null, true);
            accept(); },
        fail:function(data, message, error, accept){
            // if(error)
            //     throw new Error(message);
            console.log('failed connection to socket.io:', message);
            accept(null, false);
            if(error)
                accept(new Error(message));}
    }));

但是,每当我发布代码(使用emit('post'))时每次添加此代码后,事件都会发送两次。 我查看了一下,在调试中看到socket.on('connection')被调用了两次,这是我的角度服务

export class BlogService {
  private socket = io('http://localhost:3000');

  constructor() {}

  joinRoom(blog:Blog) {
    this.socket.emit('join', blog.name);
  }

  sendPost(msg:string,room:string) {
    console.log(msg);
    this.socket.emit("post",{msg:msg,room:room});
  }

  getMessages(): Observable<{msg:string,user:string}> {
    return new Observable<{msg:string,user:string}>(observer =>{
      this.socket.on('post', (data) => {
        observer.next(data);
      });
    });
  }
}

在chrome调试器中,我看到sendPost函数仅被调用一次,但是在服务器中却被调用了两次,显然在连接中存在一个问题,使它两次连接到同一用户,为什么? ?

0 个答案:

没有答案