2013-10-13 3 views
0

Я пытаюсь установить безопасное соединение socket.io. Я настроить сервер локальных апачский для запуска HTTPS на 443, но теперь я не могу получить на сторону клиента Socket.io открыть защищенное соединение по порту 9650.Не удается получить SSL для работы с NodeJS

стороны код сервера просто:

this.socket = require("socket.io").listen(port); 

И просто стороне клиента:

<script type="text/javascript" src="http://localhost:9650/socket.io/socket.io.js"></script> 

(HTTPS не будет работать здесь)

this.Socket = io.connect("https://localhost", {secure: true, port:9650}); 

Ио определяется таким образом, я могу назвать подключения, но я получаю эту ошибку, когда я пытаюсь подключиться:

GET https://localhost:9650/socket.io/1/?t=1381630341479 socket.io.js:1659 

Я пробовал вариации на соединения и не могут найти рабочее решение. Все, что работает, безопасно, установлено в false, но это не то, что я ищу.

Это НЕ приложение-узел http. Это приложение общего назначения. Кажется, что все, что мне нравится, относится к серверам http-типа, и мне здесь это не нужно.

ответ

0

Вы получаете сообщение об ошибке, поскольку клиент не может найти ресурс HTTPS, когда он пытается связаться с сервером. Чтобы исправить это, вам понадобится Socket.IO для прослушивания экземпляра сервера HTTPS.

Socket.IO будет внутренне использовать HTTP-сервер, независимо от того, нужен он вам или нет. По умолчанию это HTTP-сервер, поэтому, если вы хотите использовать транспорты через TLS, вам нужно будет вручную создать сервер HTTPS.

var fs = require('fs'); 
var https = require('https'); 

var options = { 
    key: fs.readFileSync('key.pem'), 
    cert: fs.readFileSync('cert.pem') 
}; 

var server = https.createServer(options); 
var io = require('socket.io').listen(server); 

server.listen(); 
+0

Итак, все веб-порты версии HTTP? Я смущен. Я думал, что websockets - это другой транспортный протокол, поэтому он был намного быстрее. Теперь я читаю HTTP-заголовок «Upgrade», поэтому, возможно, я ошибаюсь. –

+0

У WebSockets есть собственный протокол, и их единственное отношение к HTTP - это то, что они используют его запросы на обновление. Socket.IO, с другой стороны, также требует HTTP/HTTPS для подтверждения и служит ресурсу 'socket.io.js'. Поскольку Socket.IO имеет более одного транспорта, многие резервные транспорты также используют HTTP, такие как htmlfile или XHR long-poll. – hexacyanide

+0

аккуратный. спасибо за помощь –