Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Socket.io服务器未侦听连接事件_Node.js_Sockets_Socket.io - Fatal编程技术网

Node.js Socket.io服务器未侦听连接事件

Node.js Socket.io服务器未侦听连接事件,node.js,sockets,socket.io,Node.js,Sockets,Socket.io,我是Node.js的新手。我正在使用socket.io构建一个实时提要应用程序 我正在开始使用我的应用程序。 与express相结合 下面是我的服务器代码 /** * Module dependencies. */ var express = require('express'); var logger = require('morgan'); var routes = require('./routes'); var app = express(); var http = require(

我是Node.js的新手。我正在使用socket.io构建一个实时提要应用程序

我正在开始使用我的应用程序。 与express相结合

下面是我的服务器代码

/**
 * 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>

var socket=io();
我启动了我的服务器,它工作得很好 但即使在客户端页面加载并提供服务之后,连接事件也不会被监听,并且代码也不会在控制台中打印“用户已连接”

再补充一点,我在中间使用了一个从端口5000开始的应用程序路由器

我检查了chrome控制台,它不断地报告错误,比如

快照我的chrome控制台有错误

干杯


Saurav

在这种情况下,您不能使用
app.listen()
,因为此时您没有使用Socket.io使用的
HTTP
实例进行侦听

创建时,您正在将express实例
应用程序
传递给您的
HTTP
实例
HTTP
。因此
app
被用作
http
的基础。然后在创建
io
时将
http
传递到
socket.io

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

您需要做的是使用
http
变量进行侦听,因为这是您正在实例化
io
的服务器。在npm首次安装socket.io时,将您的
app.listen()
更改为
http.listen()

npm install socket.io--保存

节点程序(后端):

而不是:

app.listen(3006);
改为:

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

如果您的节点程序和前端程序在localhost的同一端口中运行

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

var socket=io();
节点程序和前端程序在两个不同的端口上运行

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

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

变量套接字=io(“http://localhost:5000/socket.io/socket.io.js");

如果node程序正常,希望它能工作。

非常感谢您的输入和帮助

我做了几件事帮助我解决了这个问题

(a) 我使用io.connect(“url”)代替io()

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

这两种解决方案的灵感都来自于此链接

干杯


Saurav

介意用chrome控制台上的错误更新吗?由于这些URL是本地主机,因此无法查看它们。@ckross01感谢您的回复…更新了我的chrome控制台的快照…看起来您的前端代码期望端口5000,但您的express服务器正在侦听3006,因为我说我的应用程序路由器正在端口5000gotcha上运行,路由器是否将http 101请求转发到您的express服务器?谢谢您的输入…是这样做的,但给出的结果不同results@saurav“结果不一样”是什么意思?这样做会得到什么样的结果?我的意思是,当socket.io尝试轮询并且服务器没有响应连接事件时,它会给出与chrome报告404错误相同的结果