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

Socket.IO emitting for each client when only one client emits

我遇到了一个奇怪的问题,当我在只有 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 条消息。

我发现了问题所在。该问题与 Angular 2 有关。如果您在 url 栏中键入“http://localhost:3001/”,Browsersync 将打开。转到同步选项并关闭 "Clicks - mirrors clicks across devices"。这为我解决了它,希望它能帮助将来遇到这个问题的人。