我想使socket.io工作在http
和https
連接,但似乎與我的配置,它只能在其中之一工作。同時使用http和https爲socket.io
使用下面的配置選項,socket.io可以通過https
訪問我的應用程序,但是當試圖通過正常的http
訪問時,它無法連接,我收到錯誤。
var app = express()
, http= require('http').createServer(app)
, https = require('https').createServer(options, app)
, io = require('socket.io').listen(https, { log: false })
後來我有這個
http.listen(80, serverAddress);
https.listen(443, serverAddress);
在客戶端,我有這樣的:
<script src='/socket.io/socket.io.js'></script>
var socket = io.connect('https://<%= serverAddress %>', {secure: true, 'sync disconnect on unload' : true});
當然,如果我切換或http上.listen
和.connect
功能https的選項服務器和客戶端分別我有相反的結果。 Socket.io可以通過http訪問,而不是通過https訪問。
這怎麼可能實現呢?我主要需要它,因爲它是關於一個Facebook應用程序,所以它必須根據Facebook規則提供http和https連接選項。
編輯:萬一它有助於這個問題,我收到的錯誤是低於
Failed to load resource: the server responded with a status of 404 (Not Found) http://DOMAIN/socket.io/socket.io.js
也正因爲如此,我得到其他如:
Uncaught ReferenceError: io is not defined
來自'http'的客戶端能夠與連接到'https'的某個人進行通信嗎? 關於'stunnel'我試過了,也是'http-proxy',但是我無法讓它們正常工作。你能提供一個例子嗎? –
抱歉,延遲。是的,stunnel負責SSL並透明地解密連接到https端口(443)的客戶端,以便它們顯示爲正在連接以表示http端口(80)。 – MrTorture
這裏有一個工作簡單的stunnel配置,在443上偵聽並將所有傳入流量轉發到同一主機的端口80的要點:https://gist.github.com/mbenedettini/5911415 – MrTorture