【问题标题】:socket.io.js 404 (Using apache to host site)socket.io.js 404(使用 apache 托管站点)
【发布时间】:2015-11-01 07:36:03
【问题描述】:

好的,所以我让我的 socket.io 服务器在不同的端口上侦听,但是为了让它与 https 一起工作,我需要让它在不传入端口的情况下进行侦听(默认)。 (它在加载 http 的不同端口上工作正常,但我需要它在 https 上工作)

我的项目运行良好,客户端可以正常连接和发送数据。但是,我将该站点移至具有 SSL 证书的主域。该站点通过https加载所有内容,因此无法加载socket.io.js的http版本

但是,现在我将其切换为 var client = require("socket.io").listen().sockets; 而不是在不同/特定端口上侦听,它仍然无法正常工作。它没有给我一个连接错误,而是根本不包括该文件。

我担心我最终需要重新制作整个网站以通过 node.js 托管我的文件,我宁愿不必这样做。

我没有使用除mysql-nodesocket.io 之外的任何其他模块,如果可能的话,我更愿意保持这种方式。我是 node.js 的新手,所以如果有一个我不知道的明显答案,我很抱歉。

然而,我环顾四周,似乎无法在任何地方找到答案。或者,至少是一个明确的答案。

使用websockets 代替socket.io 会更好吗? 如果是这样,我将如何去做?老实说,我更愿意重新制作我的节点应用程序,而不是重新制作我的网站。

我将 socket.io.js 文件包含在客户端中,如下所示:

<script src="https://mysite/socket-io/socket.io.js"></script>

但当然是 404,因为它不是我的 apache 服务器上的实际文件。我的public_html 目录中没有名为socket-io 的文件夹/目录,所以这对我来说很有意义。

但是,我怎样才能让它工作呢?我需要通过 node.js 托管我的文件还是使用 HTML5 websockets 会更好?我的网站有相当多的用户使用移动设备,所以我必须确保它也能在移动设备上运行。

【问题讨论】:

  • 为什么要使用两个独立的 Web 服务器(Apache 和 node.js)来创建您的网站?您如何在架构上进行设置?您是在尝试使用 Apache 服务器还是使用 node.js 服务器来提供 socket.io.js 文件?

标签: javascript node.js sockets ssl


【解决方案1】:

如果您打算使用 apache 来托管 socket.io.js 文件,那么您需要将该文件放在您的 Apache 服务器上,该文件可以由 Apache 提供服务,就像任何其他 Web 文件一样您希望 Apache 服务器提供服务。或者,您也可以从公共 CDN 提供 socket.io.js 并使用公共 CDN URL。它只是一个JS文件。您可以将它放在任何地方,也可以使用任何到达将提供文件的位置的 URL。让 node.js 和 socket.io 为您服务有一些好处,因为它保证客户端和服务器的 socket.io 版本始终保持同步,但您不必那样做。

如果您使用的是 node.js(听起来您至少有一定的能力),那么如果您使用 node.js 为您的网站提供服务,那么 node.js 中内置的 socket.io 将自动提供该文件页面,并且您已将 socket.io 配置为侦听与 node.js Web 服务器相同的端口。在这种情况下,您的网页和 socket.io 将使用相同的端口,并且都将通过 node.js 服务器运行。

您还没有真正解释为什么要同时使用 node.js 和 Apache,该架构是如何工作的,以及为什么您使用 Apache 来为您的某些网站提供服务,而不是仅仅为整个网站使用 node.js使用 socket.io 肯定是更清洁的选择。

如果你愿意,你可以使用普通的 webSockets 来代替 socket.io,但是你可能不得不在 webSockets 之上构建一些 socket.io 功能(自动重新连接、消息传递等......)并且使用普通的 webSockets 并不会真正简化您遇到的任何 Apache/node.js 问题。使用 Apache 或 node.js 将 socket.io.js 文件提供给客户端是微不足道的,一旦客户端拥有该文件,使用普通 webSockets 实际上比使用 socket.io 更多的工作,因为有额外的功能socket.io 已经构建好了。

【讨论】:

  • 我使用 apache 来托管我的文件只是因为这是我从一开始就一直在使用的。我可能应该解释得更清楚;我使用 node.js/socket.io 为 socket.io.js 文件提供服务,但我使用 apache 为整个站点(和子域)提供服务。我想我可以在站点中添加 socket.io 项目,并包含 js 文件(适用于 http,但不适用于 https)。我不确定如何使用 node.js 托管网站本身,并且 https 可以使用它吗? PHP/MySQL 也能正常工作吗?节点是否足够稳定以保持站点 24/7 全天候运行?谢谢顺便说一句:)
  • @Axiom - 如果您已经将 PHP 与 Apache 一起使用,为什么不直接获得一个与 Apache/PHP 一起使用的 socket.io 实现,而不是在您的堆栈中引入一整套额外的 Web 服务器技术网络套接字?
  • 哦!我不知道 PHP 有能力这样做。谢谢你。我会调查的
  • @Axiom - 如果您的 Apache 服务器只提供静态文件,只需几行代码即可让 node.js 接管静态文件的服务并从等式中删除 Apache。如果您从连接 socket.io 连接的同一服务器和端口提供网页,则通过 node.js 和 https 的 socket.io 将工作得更干净。
  • 我将如何通过 node 而不是 apache 来托管我的文件?我知道 node.js 有“http”模块,但是如何使用 https?还;它还会支持 .htaccess 文件吗?或者至少有一种不同的方式让我重写 url?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
相关资源
最近更新 更多