无法获得socket.io来轮询(node,js,express,ejs,socket.io)

时间:2016-01-09 12:07:14

标签: node.js 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>

现在我一直在:

  

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

我不确定我做错了什么。据我所知,我将socket.io以正确的方式附加到服务器上?

希望任何人都可以指出我做错了什么。

1 个答案:

答案 0 :(得分:4)

您的节点服务器侦听端口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>

在控制台中我得到“无法加载资源:net :: ERR_CONNECTION_REFUSED”

当我更改客户端代码时

<script>
                var socket = io();
                socket.on('news', function (data) {
                    console.log(data);
                    socket.emit('my other event', { my: 'data' });
                });
            </script>
一切正常。似乎问题在于客户端套接字变量的初始化。