当只有一个客户端发出时,为每个客户端发出Socket.IO

时间:2017-03-16 01:08:39

标签: angularjs node.js sockets socket.io emit

我有这个奇怪的问题,当我向服务器发送消息而只有1个客户端时,一切正常,因为只有一个消息被发送。但是当多个客户端连接到服务器,并且一个客户端向服务器发送内容时,服务器会收到来自每个客户端的消息,原因有些奇怪。

我正在使用Socket.IO和Angular 2.

客户代码:

import { Component } from '@angular/core';
import * as io from "socket.io-client";

@Component({
  moduleId: module.id,
  selector: 'register-app',
  templateUrl: 'register.component.html',
})
export class RegisterComponent  { name = 'Angular'; 
socket: SocketIOClient.Socket;
    constructor(){
        this.socket = io('http://localhost:9999');
    }

    registerAccount(){
        this.socket.emit('sweg', JSON.stringify('waaaaat'));
    }
}

服务器代码:

io.on('connect', function (socket) {
    console.log("a user connected");

    socket.on('sweg', function(msg) {
        var incomingMsg = JSON.parse(msg);
        console.log(incomingMsg);
    });
});

使用1个客户端发出时的服务器响应: image 使用2个客户端发出服务器响应: image

正如您所看到的,客户端由于某种原因发出两次,因为有2个客户端,即使这些客户端中只有1个决定发出。任何帮助将不胜感激。

编辑:如果我可能不清楚,我的目标是当客户端发出时,它应该只为自己而不是所有其他客户端发射。

2 个答案:

答案 0 :(得分:0)

每个客户端发送并连接到服务器,因此您将在服务器中收到2条消息。

答案 1 :(得分:0)

我发现了问题所在。该问题与Angular 2有关。如果您输入" http://localhost:3001/"在网址栏中,Browsersync打开。转到同步选项并关闭"点击 - 镜像跨设备的点击次数"。这解决了它,希望它可以帮助将来有这个问题的人。