Node.js,socket.io:接收来自每个socket.io调用的重复请求

第一次尝试使用node.js,像其他人一样创build一个简单的实时聊天应用程序。

一直有问题,最后〜2小时找不到解决scheme/原因。

我最初在我的聊天应用程序中遇到了这个问题,对服务器的每一个请求都会被复制,所以消息会出现两次,在控制台中,连接的服务器会logging两次。 我已经实施了一些解决scheme,因为在这里有几个类似的问题,但没有解决问题。

我试图在一个新的testing应用程序重新创build问题,看看我能不能find我做错了什么。

服务器代码

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绑定到一个button点击。

这里是控制台日志…

(不会让我张贴图片)

 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个客户端连接无关紧要,或者刷新请求只被调用两次。

任何人都可以从我的代码看到问题可能是什么? 如果你运行这个代码,你会得到相同的输出?

干杯。

从评论中可以看出,这个问题与node.js / socket.io没有任何关系,正如我在想的那样,问题是我已经宣布了我的angular色脚本两次,导致我的angular控器被调用两次。

  <script src="~/Scripts/angular.js" type="text/javascript"></script> <script src="~/Scripts/angular.js" type="text/javascript"></script> 

删除重复的声明解决了这个问题。