Socket.IO испускает для каждого клиента, когда испускается только один клиент

У меня странная проблема: когда я отправляю сообщение на сервер, когда есть только 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 клиента, хотя только один из этих клиентов решил излучать. Любая помощь будет оценена.

Изменить: Если я, возможно, не ясно, моя цель состоит в том, чтобы, когда клиент излучает, он должен излучать только для себя, а не всех других клиентов.

2 ответа

Решение

Я выяснил, в чем проблема. Проблема была связана с Angular 2. Если вы введете " http://localhost:3001/" в строке URL, откроется Browsersync. Перейдите в Параметры синхронизации и отключите "Клики - отражает клики на разных устройствах". Это решило это для меня, надеюсь, это поможет людям, которые имеют эту проблему в будущем.

Каждый клиент излучает и подключается к серверу, поэтому вы получите 2 сообщения на вашем сервере.

Другие вопросы по тегам