Я пытаюсь сделать 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 с параметрами HTTPS на функции .listen
и .connect
сервера и клиента соответственно, я получаю обратные результаты. Socket.io может получить доступ через http, а не через https.
Как это можно достичь? Мне это нужно в основном потому, что речь идет о приложении facebook, поэтому он должен предоставлять как http, так и https-соединения в соответствии с правилами facebook.
Edit: В случае, если это помогает о проблеме, ошибки я получаю это ниже
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