Node.js Socket.io服务器未侦听连接事件
我是Node.js的新手。我正在使用socket.io构建一个实时提要应用程序 我正在开始使用我的应用程序。 与express相结合 下面是我的服务器代码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(
/**
* 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错误相同的结果