![](/img/trans.png)
[英]Cannot connect or emit to Amazon ECS Socket.io Server via Socket.io from a HTML file located in S3 bucket
[英]Unable to connect to socket.io from html file served via different server or file system
網上的大部分例子,包括官方要求在服務器端設置以下內容:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
io.on('connection', function(socket){
console.log('a user connected');
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
這在客戶端:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
</script>
所以這使用相同的服務器來提供index.html
以及處理套接字連接,看起來sockets.io在服務器上的socket.io
目錄下創建了一個socket.io
js 文件。 到此為止都很好。
現在,我正在開發一個cordova應用程序,我現在不必從服務器提供index
文件,因為它將與應用程序捆綁在一起。 我只需要連接到在特定端口上運行在本地機器上的套接字服務器。
另外,我不想使用 express,因為我正在學習 - 我認為它不是簡單設置套接字服務器所必需的,我寧願在不了解它的作用或它如何使我的生活更輕松的情況下使用它(換句話說,在進入 jquery 世界之前,我寧願了解一兩件關於 javascript 的事情...... )。
所以我在我的 server.js 文件中嘗試了以下內容:
var port = 80;
io = require('socket.io')(port);
console.log('socket server started @ %s !', port);
通過node server.js
命令執行此命令會打印socket server started @ 80 !
根據應該創建一個http
服務器(可能由 socket.io 用很棒的東西增強)偵聽端口80
的文檔。
現在,如果我通過括號 IDE 在http://127.0.0.1:56958/...path/index.html
啟動的node.js
服務器加載index.html
,其中包含以下內容:
<script src="scripts/libs/socket.io/socket.io.js"></script>
<script>
console.log('test');
var socket = io('http://127.0.0.1:80');
</script>
(其中scripts/libs/socket.io/socket.io.js
是我從他們的github repo下載的獨立sockets.io
客戶端庫)這讓我在最新版本的 chrome 中出現以下錯誤:
Refused to execute inline script because it violates the following Content Security Policy directive: "default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-2j6JUXRmZBJXdmMDTRd3ZxygBJNrb8gSbgOi4FOjiy0='), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
我還嘗試使用file:///
協議從文件系統加載index.html
文件,這會引發相同的錯誤。
我做錯了什么,我該如何解決?
注意:我已經看到了這個問題,但是我沒有cordova.xml
文件,因為我還沒有使用cordova 來構建應用程序。 我試過啟用跨源資源共享(使用 store 的擴展),但這也無濟於事。
更新:
下面是目錄結構:
root
|_app
| | // lots of cordova directories and files like package.json
| |_www
| |_scripts
| | |_libs
| | |_socket.io
| | |_socket.io.js
| |_index.html
|_node_modules
| |_socket.io
|_server
|_server.js
插件cordova-plugin-whitelist阻止了您的socket.io 連接。 您可以在此處查看配置詳細信息。 您需要仔細配置它,但為了測試的目的,您可以允許所有內容:
<meta http-equiv="Content-Security-Policy" content="default-src *;">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.