【问题标题】:cant get socket.io to poll (node,js, express, ejs, socket.io)无法让 socket.io 轮询(节点、js、express、ejs、socket.io)
【发布时间】:2016-01-09 12:07:14
【问题描述】:

我正在尝试让 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-61net::ERR_CONNECTION_REFUSED

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

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

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

    一切正常。似乎问题在于客户端套接字变量的初始化。

    【讨论】:

    • 感谢您的评论,但它仍然给出了同样的错误。我之前使用该教程作为参考,但它无法找到他们在我的代码中没有做的事情。
    • @Merijn 在您的客户端代码中,尝试在没有 URL 的情况下初始化 socket.io:var socket=io()。根据手册,它将尝试连接到为该页面提供服务的主机。
    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 2017-04-06
    • 2018-10-13
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多