Tôi đang cố gắng làm cho socket.io hoạt động cả trên các kết nối http
và https
, nhưng có vẻ như với cấu hình của tôi, nó chỉ có thể hoạt động trên một trong số chúng.Sử dụng cả http và https cho socket.io
Với tùy chọn cấu hình bên dưới socket.io có thể truy cập ứng dụng của tôi qua https
, nhưng khi cố gắng truy cập thông qua http
thông thường, nó không thể kết nối và tôi nhận được lỗi.
var app = express()
, http= require('http').createServer(app)
, https = require('https').createServer(options, app)
, io = require('socket.io').listen(https, { log: false })
Và sau đó tôi có điều này
http.listen(80, serverAddress);
https.listen(443, serverAddress);
Về phía khách hàng tôi có điều này:
<script src='/socket.io/socket.io.js'></script>
var socket = io.connect('https://<%= serverAddress %>', {secure: true, 'sync disconnect on unload' : true});
Tất nhiên nếu tôi chuyển đổi http với các tùy chọn https về chức năng .listen
và .connect
của máy chủ và máy khách tương ứng tôi có kết quả ngược lại. Socket.io có thể truy cập thông qua http và không thông qua https.
Làm cách nào để đạt được điều này? Tôi cần nó chủ yếu là vì nó là về một ứng dụng facebook, vì vậy nó phải cung cấp cả hai tùy chọn kết nối http và https theo quy tắc facebook.
Chỉnh sửa: Trong trường hợp nó giúp về vấn đề này, các lỗi tôi đang nhận được là dưới
Failed to load resource: the server responded with a status of 404 (Not Found) http://DOMAIN/socket.io/socket.io.js
Và vì điều này tôi nhận được những người khác như:
Uncaught ReferenceError: io is not defined
Một khách hàng từ 'http' có thể liên lạc với ai đó được kết nối với' https' không? Về 'stunnel' tôi đã thử nó và cũng' http-proxy', nhưng tôi không thể làm cho chúng hoạt động đúng. Bạn có thể cung cấp một ví dụ cho bất kỳ điều nào trong số này không? –
Xin lỗi vì sự chậm trễ. Có, stunnel sẽ chăm sóc SSL và minh bạch giải mã các khách hàng của bạn kết nối với cổng https (443) để chúng xuất hiện như đang được kết nối với cổng http thể hiện (80). – MrTorture
Dưới đây là một ý chính với cấu hình đơn giản hoạt động cho stunnel lắng nghe trên 443 và chuyển tiếp tất cả lưu lượng truy cập đến cổng 80 của cùng một máy chủ: https://gist.github.com/mbenedettini/5911415 – MrTorture