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 сообщения на вашем сервере.