nodejs配合使用socket.io,设置监听端口
发布于 1个月前 作者 wklc2015 369 次浏览 来自 问答

今天用官网的例子测试了socket.io,官网的例子很ok,但是在我改了监听端口后,就开始报错了

服务器端:

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(8081, function(){
    console.log('start listen...')
});

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

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

客户端:

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

但是我在改了服务端的监听端口不是80后,客户端就报错了

GET http://localhost/socket.io/?EIO=3&transport=polling&t=1433127576223-189 
(index):1 XMLHttpRequest cannot load http://localhost/socket.io/?EIO=3&transport=polling&t=1433127576223-189. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access. The response had HTTP status code 404.

不知道这是什么错误呢?

5 回复

http://127.0.0.1 和 脚本中的var socket = io(‘http://localhost’); 在浏览器视为不同域的,改为同一种即可。 一般如果要在生产环境测试,最好绑hosts这样可以避免各种因为localhost的域导致的比较隐蔽的问题。

自己学一下markdown用法,下次我就不帮你编辑了,让别人看的舒服,回复才会多

io('http://localhost:8081');

@joney-pinkman 谢谢 的确是因为127.0.0.1和localhost在浏览器不同域造成的

回到顶部