0
因此,如果使用socket.io的示例,但將io.on
函數放入app.get
,則偵聽器將增加。我如何正確解決這個問題?我正在使用各種解決方案,但它們只是一種「膠帶」而不是一種正確的解決方案。 例如當頁面重新加載時,Socket.io監聽器會增加。節點js
socket.removeAllListeners();
或
function socketio() {
var counter = 1;
io.on('connection', function (socket) {
if (!(counter)) {
counter--;
socket.emit('news', {hello: 'world'}, function() {
});
socket.on('my other event', function (data) {
console.log(data);
});
}
});
}
感謝和我的英語很抱歉。
Server代碼:
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.use(express.static(__dirname + '/public'));
function socketio() {
io.on('connection', function (socket) {
socket.emit('news', {hello: 'world'}, function() {
});
socket.on('my other event', function (data) {
console.log(data);
});
});
}
app.get('/', function (req, res) {
socketio();
res.render('socket.jade');
});
客戶端代碼
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' }, function(){
});
});
第一頁重裝
Server console.log
{ my: 'data' }
Client console.log
Object { hello: "world" }
二重裝後
Server console.log
{ my: 'data' }
{ my: 'data' }
{ my: 'data' }
{ my: 'data' }
Client console.log
Object { hello: "world" }
Object { hello: "world" }
等等......
是的,但是如果我需要在'io'中獲得'req.session'。我如何在不使用'app.get/app.use'的情況下做到這一點? '函數dataInsert(REQ){ \t io.on( '連接',函數(插座){ \t \t \t socket.on( '數據',功能(數據){ \t \t \t \t data.toString() ; \t \t \t \t dataTasksInsert(req.session.user,數據); \t \t \t}); \t}); }' –