无法 socket.io 进行轮询(node、js、express、ejs、socket.io)

cant get socket.io to poll (node,js, express, ejs, socket.io)

我正在努力 socket.io 工作。 这是我使用的包:

"express": "~4.9.0",
"ejs": "~0.8.5",
"socket.io":"~1.3.3"

我的app.js:

// loading modules
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

//routers
var indexRouter = require('./routes/index');

// Setup serving static assets
app.use(express.static('public'));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');


io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
   console.log(data);
  });
});


// Setup initial routing - index
app.use('/', indexRouter);


// Start the server
server.listen(3000, function(){
 console.log('App listening at http://localhost:3000');
});

我的路由器:

var express = require('express');
 var router = express.Router();

router.get("/", function(req, res){
  res.render("index");
});

module.exports = router;

我的模板

<html>
  <head>
    <title>Real time web chat</title>
    <script src='/socket.io/socket.io.js' type='text/javascript'></script>
    <script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
</head>
 <body>
  hi world!
 </body>
</html>

现在我不断得到:

GET http://localhost/socket.io/?EIO=3&transport=polling&t=1452340948465-61 net::ERR_CONNECTION_REFUSED

我不确定我做错了什么。据我了解,我以正确的方式将 socket.io 连接到服务器?

希望有人能指出我做错了什么。

您的节点服务器侦听端口 3000。在客户端更改此设置:

var socket = io.connect('http://localhost');

var socket = io.connect('http://localhost:3000');

同时查看 socket.io 教程:http://socket.io/get-started/chat/

编辑:

我在我的服务器上重新创建了您的代码。如果客户端代码像你的:

<script>
            var socket = io.connect('http://localhost');
            socket.on('news', function (data) {
                console.log(data);
                socket.emit('my other event', { my: 'data' });
            });
        </script>

在控制台中我得到了"Failed to load resource: net::ERR_CONNECTION_REFUSED"

当我更改客户端代码时

<script>
                var socket = io();
                socket.on('news', function (data) {
                    console.log(data);
                    socket.emit('my other event', { my: 'data' });
                });
            </script>

一切正常。看来问题出在客户端套接字变量的初始化中。