1

目前我有以下问题:

我有一个 apache 服务器,在端口 443 上运行 SSL,在 80 上运行标准(http)。另外安装了一个带有 socket.io 模块的 Node.js 服务器。

我用一个监听端口 3000 的 http 服务器编写了一个 socket.io javascript,所以在客户端(浏览器)中我包含了这样的 socket.io.js

<script type="text/javascript" src="http://www.example.com:3000/socket.io/socket.io.js"></script>

这很好用,当我通过http://www.example.com执行我的网站时。浏览器正确地找到了 socket.io.js。

如果我通过https(如https://www.example.com )执行我的网站,我将调整上面的脚本部分,如下所示:

<script type="text/javascript" src="https://www.example.com:8888/socket.io/socket.io.js"></script>

我将 src 更改为https://并将端口更改为 8888。现在我也必须调整我的 socket.io 脚本。

var https = require('https');
    var fs = require('fs');
    var socketio = require('socket.io');

    // The server options
    var svrPort = 8888; // This is the port of service

var svrOptions  = {
    key:    fs.readFileSync('/path/to/example.key'),
    cert:   fs.readFileSync('/path/to/example-ca.crt'),
    ca:     fs.readFileSync('/path/to/example-server.pem')
};

    // Create a Basic server and response
    var servidor = https.createServer( svrOptions , function( req , res ){
    res.writeHead(200);
    res.end('Hi! Code here...');
    });

    // Create the Socket.io Server over the HTTPS Server
    io = socketio.listen( servidor );

    // Now listen in the specified Port
    servidor.listen( svrPort );

如果我使用节点执行文件,socket.io 会正确启动:

info  - socket.io started

但是问题来了:如果我在浏览器中执行 socket.io.js 文件的 URL,什么也没有发生:

https://www.example.com:8888/socket.io/socket.io.js

Firefox 回答:数据通信中断

节点服务器也没有收到任何请求。socket.io 没有反应。

我必须做什么?

谢谢!

4

1 回答 1

0

这里需要两个 js 脚本,一个用于 node.js 服务器(我假设是您发布的那个),一个嵌入在 html 页面中。

<source>标签与您的 node.js 服务器脚本的执行无关。它说明了客户端在加载 HTML 页面时将下载客户端 js 脚本的位置。因此,它需要可从您的浏览器下载 - 只需尝试自己输入该 URL。

socket.io 代码的客户端接收其内容的地址(node.js 服务器的地址)必须在客户端 js 中更新。

根据项目的大小,为什么不同时使用 node.js 作为静态内容的唯一服务器呢?

于 2015-02-11T18:39:29.690 回答