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 个来自套接字的响应。