簡體   English   中英

無法從通過不同服務器或文件系統提供的 html 文件連接到 socket.io

[英]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以及處理套接字連接,看起來在服務器上的socket.io目錄下創建了一個socket.io js 文件。 到此為止都很好。


現在,我正在開發一個應用程序,我現在不必從服務器提供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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM