【问题标题】:Socket.io initialization resulting in a 404 network errorSocket.io 初始化导致 404 网络错误
【发布时间】:2015-08-11 15:24:27
【问题描述】:

我正在使用 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

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

因为我使用的是 express,但不知道如何完成。

服务器端代码:

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() 可解决该错误。感谢任何建议。

谢谢

【问题讨论】:

  • 请向我们展示您的服务器端 socket.io 代码。客户端用于连接 webSocket 的 URL 是 socket.io 连接的默认 URL,因此除非您在服务器上进行了自定义操作,否则它看起来是正确的。如果你在服务器上做了一些自定义的事情,那么我们需要看看那是什么。

标签: javascript angularjs node.js socket.io


【解决方案1】:

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

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

  1. 将为您的网页提供服务的 Web 服务器与 socket.io 服务器相结合,以便同一台服务器同时兼顾两者。

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

要在客户端请求中指定端口,您可以这样做:

<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 服务器所在的 express 服务器请求客户端 socket.io 库(因此它使用与您的 socket.io 服务器运行相同的端口)。

【讨论】:

    【解决方案2】:

    如果提供 socket.io 客户端 javascript 的 HTML 不是也由 express 在端口 8888 提供服务(看起来 html 来自端口 3000),你可能只需要配置 socket.io 客户端指向服务器端 socket.io 已设置监听的端口(@98​​7654323@):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 2013-07-26
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2012-02-29
      • 1970-01-01
      相关资源
      最近更新 更多