Пробую мою руку с node.js в первый раз, создав простое приложение чата в режиме реального времени, как и все остальные.Node.js, socket.io: получение дубликатов запросов от каждого вызова socket.io
У вас возникли проблемы с этим и последние ~ 2 часа не могут найти решение/причину для него.
У меня возникла эта проблема из моего приложения чата, каждый отдельный запрос на сервер будет дублироваться, поэтому сообщения появятся дважды, в консоли сервер соединения будет записывать дважды. Я реализовал несколько решений, так как есть пара подобных проблем, но здесь нет проблем.
Я попытался воссоздать проблему в новом тестовом приложении, чтобы узнать, могу ли я найти то, что я сделал неправильно. Код
Серверный код
var express = require('express');
var routes = require('./routes');
var path = require('path');
var http = require('http');
var app = module.exports = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
app.set('port', 1620);
app.use(express.logger('dev'));
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
io.sockets.on('connection', function (socket) {
socket.on('test', function (data) {
console.log('Test.' + data);
});
});
server.listen(app.get('port'), app.get('ipaddr'), function() {
console.log('Express server listening on IP/hostname: "' + app.get('ipaddr') + '" and port: "' + app.get('port') + '"');
});
Клиент:
'use strict';
angular.module('chatter', []);
angular.module('chatter').controller('chatterCtrl', [
'$scope', '$http', function ($scope, $http) {
$scope.test = 'Hello';
var socket = io.connect();
$scope.sendTest = function() {
socket.emit('test', 'ThisIsATest');
}
}
]);
Где $ scope.sendTest привязан к кнопке мыши.
Вот лог консоли ...
(не позволит мне размещать фото)
Test.1
Test.1
Test.2
Test.2
Test.3
Test.3
Test.4
Test.4
Test.5
Test.5
Test.6
Test.6
В отличие от других вопросов, это похож проблема не связана;
- Для FavIcon называют (есть express.favicon, это происходит каждый вызов и во всех браузерах)
- Для обработчика событий который вызывается много раз, запрос всегда только дублированы, не имеет значения, если 4 клиента подключаются или обновляется запрос, который вызывается только дважды.
Может ли кто-нибудь увидеть из моего кода, в чем проблема? И если вы запустите этот код, вы получите тот же результат?
Cheers.
Моя первая мысль заключается в том, что ваш угловой контроллер выполняется дважды. – Incognito
Если вы запустите это в отладчике, например, отладчике chrome, вы можете видеть из сетевого трафика, если данные отправляются по кабелю дважды? – aembke
Похоже, вы правы. Невозможно увидеть какие-либо сетевые вызовы в отладчике Chrome (возможно, это потому, что это веб-сайты?), Но применение точки останова к коду щелчка кнопки показывает, что он дважды ударяется. – MaxJ