繁体   English   中英

PHP无框架框架以及Node.js和安全Websocket

[英]PHP Fat-Free-Framework plus Node.js and Secure Websockets

我的任务是测试即将发布的Web应用程序与F3和Node.js以及Socket.IO一起使用的可行性。 该应用将专门使用https。 老板喜欢F3的模板,这就是为什么我们不只在服务器端使用Node。

F3将用于提供静态内容。 我想使用WSS来提供页面实时数据,并让客户端发出与该实时数据相关的请求。

我已经编写了一个测试应用程序的代码,并且所有活动部件都在工作,但是遇到了麻烦。 当我的客户端WSS Websocket尝试连接到在9220上侦听的Node应用程序时,浏览器抱怨CORS。 我通过为192.168.10.1:9220设置例外来解决此问题,但是我怀疑这种方法是否可以在生产环境中使用。

完成后,我们的网络应用将通过我们自己的硬件提供服务,该硬件将成为客户现有网络的一部分。 我正在使用通用名称为192.168.10.1的自签名证书。 我目前正在执行“重定向永久”,将所有内容从*:80强制为https。

我的问题是这样的:有没有一种方法可以允许F3抓取所有对'/ blah_blah'的页面请求,并且可能有多个Node应用程序(我们肯定会有一个应用程序)在各自的端口上监听客户端连接,并让这些客户端连接到节点端口,而不必做任何特殊的例外? 一切都通过https发生吗?

我不知道是否需要使用更多的虚拟主机或代理进行调查,或者使用什么。 我想我想要的是下一步要研究的方向,以便使所有部分都可以通过https很好地运行,而不必设置任何浏览器异常。

典型的页面将包含通过F3提供的文本和图形以及动态图形(通常作为HTML5 Canvas对象),该动态图形仅在源数据更改时通过WSS进行更新。


更新:

事实证明,只要解决CORS问题(如@ikkez所建议的),我的所有运动部件都可以正常工作。 这些是我要使其正常工作所要做的关键点:

  • 创建了证书颁发机构并将其添加到浏览器

  • 使用该CA对我们服务器的IP签名证书。 我的意思是CommonName是IP。

  • 我在*:443上使用虚拟主机,其ServerName等于服务器所在的IP。 我还启用了重写功能以使用F3。
    <Directory /var/www/html/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule .* index.php [L,QSA] </Directory>


  • 我的Node应用程序的关键调用是:

    var options = {
    密钥:fs.readFileSync('path-to-ssl / 192.168.10.178.key'),
    证书:fs.readFileSync('path-to-ssl / 192.168.10.178.cer')
    };

    var app = https.createServer(options,function(req,res){});
    var io = require('socket.io')。listen(app);
    io.set('origins','192.168.10.178 *:*');

好吧,实际上您的问题是如何在node.js上启用CORS支持? 简短的Google搜索为您提供了在express.js中进行此操作的全部资源。 在节点应用程序中发送了正确的CORS标头后,浏览器将不再为异常喊叫。

但是,如果您只需要websocket来实时更新网站上的内容,则还可以尝试使用ajax长轮询和新的$ f3-> until()方法的另一种方法,以按需加载新数据。 这里可以找到一些示例用法。 也许这已经可以解决问题了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM