expressjs 和 socket.io - 客户端上的重复消息

sue*_*red 2 node.js express socket.io

我是 Node 的初学者,我正在尝试使用 socket.io 构建聊天功能。问题是:当事件触发时,我的客户端(浏览器)收到两条消息。

app.js
var express = require('express');   
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var exload = require('express-load');
var exSession = require('express-session');
var methodOverride = require('method-override');
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(cookieParser('ntalk'));
app.use(exSession({
  secret: 'sandman',
  resave: false,
  saveUninitialized: true
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(methodOverride('_method'));
app.use(express.static(path.join(__dirname, 'public')));

exload('models')
.then('controllers')
.then('routes')
.into(app);

module.exports = app;
Run Code Online (Sandbox Code Playgroud)
//bin/www
#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('express4:server');
var http = require('http');
var server = require('http').Server(app);
var io = require('socket.io')(server);

/**
 * Configuring socket.io
 */
io.sockets.on('connection', function(client) {
    client.on('send-server', function(data) {
        var msg = "<b>" + data.name + ":</b>" + data.msg + "<br>";
        client.emit('send-client', msg);
        client.broadcast.emit('send-client', msg);
    })
});

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);


server.listen(port);
Run Code Online (Sandbox Code Playgroud)
//page-script.jade
script.
    var socket = io('http://localhost:3000');
        socket.on('send-client', function(msg){
            document.getElementById('chat').innerHTML += msg;
    })

    var send = function(event) {
        var nome = document.getElementById('name').value;
        var msg = document.getElementById('msg').value;

        socket.emit('send-server', {name : name, msg : msg});
    }
Run Code Online (Sandbox Code Playgroud)

聊天中发生了什么: https: //i.stack.imgur.com/a92K7.jpg

我知道这些文件有一些不好的做法,一旦我得到正确的结果,我就会重构它:)

小智 5

我知道,这篇文章已经很旧了。但还没有定论。备查。

重复来自这里:

这行代码: 向所有套接字client.emit('send-client', msg); 发出数据“msg”,包括您自己。

这行代码: client.broadcast.emit('send-client', msg); 数据“msg”广播给连接到套接字的每个人,不包括您自己。

这就是为什么你有 2 个来自套接字的响应。