Socket.io 从模块处理时遇到一些问题
Socket.io has some trouble when handling from modules
您好,我正在与 socket.io 和 node.js (express.js) 合作。
我看到了很多示例,来自 app.js 文件的编码。现在我想更好地组织代码,我想将我所有的 sockets.io 处理程序放在其他 modules/files.
中
这是我现在拥有的:
app.js
var moduleExports = require('./routes/moduleExports');
app.get('/', function(req, res){
res.sendfile(path.join(__dirname + '/index.html'));
io.on('connection', function(socket){
moduleExports.socketio(io, socket);
});
});
moduleExports.js
module.exports = {
init: function(){
//some other functions
}, socketio: function(io, socket){
socket.emit('chat', 'Wellcome!');
socket.on('chat', function (data) {
socket.broadcast.emit('chat', data);
//socket.broadcast.emit('chat', data);
});
socket.on('disconnect', function () {
socket.broadcast.emit('chat', 'Disconnected');
//socket.broadcast.emit('chat', data);
});
}
};
问题:
如果我打开 2 个不同的浏览器,一个浏览器用于 John,一个浏览器用于 Doe。
如果 John 发送一条消息,Doe 会收到两次。如果我再次打开第三个浏览器,并从 John 发送消息,Doe 和第三个浏览器将收到三倍的消息。
我不知道为什么会这样。我知道 "moduleExports.js" 文件出了问题。但是我需要一种方法来在 app.js 之外编写我的 socket.io 处理程序。所以我认为这将是一个很好的模式,但事实并非如此。
顺便说一句,客户端代码(有效):
<script src="/socket.io/socket.io.js"></script>
var socket = io();
function submit(){
socket.emit('chat', $('#m').val());
$('#m').val('');
return false;
}
io.on('connection'
你应该在你的代码中只有一次,每次客户端连接到你的服务器时都会抛出该事件,如果你有多次,我想它会运行更多次。我要做的是:
var moduleExports = require('./routes/moduleExports');
io.on('connection', function(socket){
moduleExports.socketio(io, socket);
});
app.get('/', function(req, res){
res.sendfile(path.join(__dirname + '/index.html'));
});
您好,我正在与 socket.io 和 node.js (express.js) 合作。 我看到了很多示例,来自 app.js 文件的编码。现在我想更好地组织代码,我想将我所有的 sockets.io 处理程序放在其他 modules/files.
中这是我现在拥有的:
app.js
var moduleExports = require('./routes/moduleExports');
app.get('/', function(req, res){
res.sendfile(path.join(__dirname + '/index.html'));
io.on('connection', function(socket){
moduleExports.socketio(io, socket);
});
});
moduleExports.js
module.exports = {
init: function(){
//some other functions
}, socketio: function(io, socket){
socket.emit('chat', 'Wellcome!');
socket.on('chat', function (data) {
socket.broadcast.emit('chat', data);
//socket.broadcast.emit('chat', data);
});
socket.on('disconnect', function () {
socket.broadcast.emit('chat', 'Disconnected');
//socket.broadcast.emit('chat', data);
});
}
};
问题:
如果我打开 2 个不同的浏览器,一个浏览器用于 John,一个浏览器用于 Doe。 如果 John 发送一条消息,Doe 会收到两次。如果我再次打开第三个浏览器,并从 John 发送消息,Doe 和第三个浏览器将收到三倍的消息。
我不知道为什么会这样。我知道 "moduleExports.js" 文件出了问题。但是我需要一种方法来在 app.js 之外编写我的 socket.io 处理程序。所以我认为这将是一个很好的模式,但事实并非如此。
顺便说一句,客户端代码(有效):
<script src="/socket.io/socket.io.js"></script>
var socket = io();
function submit(){
socket.emit('chat', $('#m').val());
$('#m').val('');
return false;
}
io.on('connection'
你应该在你的代码中只有一次,每次客户端连接到你的服务器时都会抛出该事件,如果你有多次,我想它会运行更多次。我要做的是:
var moduleExports = require('./routes/moduleExports');
io.on('connection', function(socket){
moduleExports.socketio(io, socket);
});
app.get('/', function(req, res){
res.sendfile(path.join(__dirname + '/index.html'));
});