Socket.io服务器没有监听连接事件

时间:2016-03-29 15:05:45

标签: node.js sockets socket.io

我是Node.js的新手。我正在使用socket.io来构建实时的feed应用程序。

我正在使用http://socket.io/get-started/chat/开始使用我的应用程序。 与快递结合使用

以下是我的服务器代码

/**
 * Module dependencies.
 */
var express = require('express');
var logger = require('morgan');
var routes = require('./routes');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

// log requests
app.use(logger('dev'));
app.use('/rest', routes.userInfo, routes.matchList, routes.teamList,
        routes.completedMatchList);

io.on('connection', function(socket){
      console.log('a user connected');
    });

app.listen(3006);

console.log('listening on port 3006');

然后我在我的应用程序的web文件夹中有一个index.html。

我只是使用普通代码来实现客户端套接字,如下所示

 <script src="/node_modules/socket.io/node_modules/socket.io-client/socket.io.js"></script>     
<script>
  var socket = io();
</script>

我启动了我的服务器并且运行良好 但即使在客户端页面加载并提供服务之后,也不会监听连接事件,并且代码不会在控制台中打印&#34;用户已连接&#34;。

只是添加一点,我在中间使用一个应用程序路由器,从端口5000开始。

我在Chrome控制台中检查过,它会不断报告错误,如

http://localhost:5000/socket.io/?EIO=3&transport=polling&t=LF2viiR

http://localhost:5000/socket.io/?EIO=3&transport=polling&t=LF2vj0v

快照我的Chrome控制台但有错误 enter image description here

欢呼声,

Saurav

3 个答案:

答案 0 :(得分:0)

在这种情况下,您无法使用app.listen(),因为您没有使用Socket.io正在使用的HTTP实例进行监听。

您在创建时将快速实例app传递给HTTP实例http。因此app用作http的基础。然后,您在创建http时将socket.io传递给io

var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

您需要做的就是使用http变量进行收听,因为这是您用io实例化的服务器。将您的app.listen()更改为http.listen()

答案 1 :(得分:0)

首先按照npm安装socket.io            npm install socket.io --save

节点程序(后端):

取代:

app.listen(3006);

转变为:

  http.listen(port, function(err) {
    if (err) {
        console.log(err);
    } else {
        console.log("Listening on port 8080");
    }
});

前端:

如果您的Node程序和前端程序在localhost中的同一端口运行,那么

<script src="/socket.io/socket.io.js"></script>     
<script>
  var socket = io();
</script>

节点程序和前端程序在两个不同的端口运行。

<script src="http://localhost:5000/"></script>

<script>
  var socket = io("http://localhost:5000/socket.io/socket.io.js");
</script>

希望节点程序正常可行。

答案 2 :(得分:0)

非常感谢您的投入和帮助。

我所做的一些事情帮助我解决了这个问题。

(a)我使用io.connect(&#34; url&#34;)代替io()。

(b)服务器index.js中变量和依赖项初始化的第二顺序

这两个解决方案都受此链接的启发

SocketIO- GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1418187395022-0 404 (Not Found)

欢呼声,

Saurav