Socket.io初始化导致404网络错误

时间:2015-05-28 22:26:44

标签: javascript angularjs node.js socket.io

我正在使用nodejs和express来创建一个基本的聊天应用程序,并在尝试初始化socket.io对象时收到网络404错误消息。

<script src="/javascripts/socket.io/socket.io.js-client"></script>
<script type="text/javascript">
    var socket = io.connect();
</script>

上面的代码导致某些轮询调用出现404错误

"NetworkError" 404 Not Found - http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1432851505880-89

我需要使用以下网址运行轮询:http://localhost:3000/javascripts/socket.io/?EIO=3&transport=polling&t=1432851505880-89

因为我使用快递,但不知道如何实现这一点。

服务器端代码:

var app = express();

var server = require( "http" ).createServer( app );
var io = require("socket.io").listen(server);

server.listen(8888);

io.sockets.on('connection', function(socket){

  socket.on('send message', function(data){
    io.sockets.emit('new message', data);
  });
});

module.exports = app;

我一直试图解决这个问题很长一段时间没有成功。我很感激任何建议。注释掉var socket = io.connect()可以解决错误。感谢任何建议。

由于

2 个答案:

答案 0 :(得分:2)

您的网页显然在端口3000上运行,但您的socket.io服务器正在侦听端口8888.这两个端口必须是同一个端口,因此对端口上的socket.io请求没有响应就不足为奇了3000(因为您的socket.io服务器正在侦听端口8888)。

因为它尝试的默认URL是端口3000,那么它必须是您的网页是一个端口,并且必须由不同的Web服务器提供服务。如果是这种情况,那么您需要做以下两件事之一:

  1. 将为您的网页提供服务的网络服务器与socket.io服务器相结合,以便同一台服务器负责处理这两者。

  2. 在客户端请求中指定端口,并为您的socket.io服务器启用跨源请求。

  3. 要在客户端请求中指定端口,您可以执行以下操作:

    <script src="http://myserver.com:8888/socket.io/socket.io.js"></script>
    <script type="text/javascript">
        var socket = io("http://yourserver.com:8888");
    </script>
    

    请注意,这是从socket.io服务器所在的快速服务器请求客户端socket.io库(因此它使用的是运行socket.io服务器的端口)。

答案 1 :(得分:0)

如果正在提供socket.io客户端javascript的HTML 而不是也由端口8888的快递服务(看起来html来自端口3000 }),您可能只需要将socket.io客户端配置为指向服务器端socket.io已设置为侦听的端口(8888):

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