簡體   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