socket.io.js 404(使用apache到主机站点)

时间:2015-08-09 07:03:54

标签: javascript node.js sockets ssl

好吧,所以我让我的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服务器上的实际文件。我的socket-io目录中没有名为public_html的文件夹/目录,因此这对我来说很有意义。

但是,我怎样才能让它发挥作用?我是否需要通过node.js托管我的文件,或者我最好使用HTML5 websockets?我的网站用户使用移动设备的人数相当大,所以我必须确保它在移动设备上运行。

1 个答案:

答案 0 :(得分: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的清洁选项。

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