2017-10-15 10 views
2

私はLaravelアプリケーションでシンプルなチャット機能を実行するためにexpress.jpgなどの単純なsocket.io 2.0.3サーバを使用しています。HTTPSでsocket.ioを動作させることができません

ウェブサイトをHTTPSに切り替えるまでは、すべてうまくいっていました。 socket.ioは接続を拒否しました(ERR_CONNECTION_CLOSED)。

server.js:

var io = require('socket.io')(8080, { 
    origins : //some stuff 
}); 

HTMLファイル

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 

var socket = io(':8080'); 
//more stuff 

Iサーバフォルダ、intermediate.crt、ドメイン内のすべての必要な証明書ファイルを持っている

は、ここに私の最も簡単な設定です。 com.crtとdomain.com.key

誰かが簡単な例を参考にしてtを作成する方法彼のhttpsでの作業は?前もって感謝します!

編集:Expressを使用せずに解決策が必要です。

あなたはすべての関連する設定でHTTPSサーバのインスタンスを作成することができます
+0

が重複する可能性を誰もが将来的にそれを必要とする場合ここで

は、最も簡単な作業コードです。 js、socket.io with SSL](https://stackoverflow.com/questions/6599470/node-js-socket-io-with-ssl)それは私のように見えますそのスレッドには必要なものすべてが必要です。 –

+0

Expressを使用せずにこれを行う方法はありますか? –

+0

ブラウザにクライアントコードを含めるだけでは不十分です。サーバー側の共同コンポーネントsomplaceが必要です。 –

答えて

0

私はシンプルsocket.ioコードでこれを書くために管理することができませんでしたので、私はすべての後に速達を使用して終了。

server.js HTMLで

var express = require('express'); 
var app = module.exports = express(); 
var https = require('https'); 
var fs = require('fs'); 
var server = https.createServer({ 
    key: fs.readFileSync(/*full path to your key*/), 
    cert: fs.readFileSync(/*full path to your cert*/), 
    ca: fs.readFileSync(/*full path to your intermediate cert*/), 
    requestCert: true, 
    rejectUnauthorized: false 
},app); 
server.listen(8080); //listen on port 8080 

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

io.set('origins', /*your desired origins*/); 

io.set('transports', ['websocket', 
    'flashsocket', 
    'htmlfile', 
    'xhr-polling', 
    'jsonp-polling', 
    'polling']); 

var sockets = {}; 
//your socket logic 

:[ノードの

var socket = io(':8080',{secure: true}); 
0

var https = require('https'); 
https.createServer(options, app).listen(443); 

そして、単にコンストラクタに渡し:

new SocketIo(https) 
0

重要な事実:

あなたが使用する必要があります。 httpsでないhttp、 例のようにCRTファイルをロードしてオプションオブジェクトを作成する必要があります クライアント側は次のような正しいアドレスだけを必要とします:https://YOUR_domain.com:PORT

サーバー側:

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
//High definition 
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
// Globals 
//var MEMORY_CLEANER_INTERVAL = 5000; 
//var crypto = require('crypto'); 
var tls = require('tls'); 
//dl = require('delivery'); 
var fs = require("fs"); 
var mysql  = require('mysql'); 
var express = require("express"); 
var app = express(); 
var http = require('http'); 
var https = require('https'); 
//var mkdirp = require('mkdirp'); 
var path = require('path'); 
//var nodemailer = require('nodemailer'); 
//includer 
function read(f) {return fs.readFileSync(f).toString();} 
function include(f) {eval.apply(global, [read(f)]);} 

//var BASE = require('./lib/level1_module'); 
//BASE.NAME = "YEap"; 

var pkey = fs.readFileSync('/etc/httpd/ssl/YOUR_FILE.key'); 
var pcert = fs.readFileSync('/etc/httpd/ssl/YOUR_FILE_com.crt') 

var SERVER_PORT = 9000; 
var options = { 
    hostname: 'YOUR_PAGE.com', 
    port: 9000, 
    key: pkey, 
    cert: pcert, 
    requestCert: true, 
    rejectUnauthorized: false, 
}; 

var server = https.createServer(options, app).listen(SERVER_PORT, function(){ 
    console.log("Express server listening on port " + SERVER_PORT); 
}); 

var io = require('socket.io').listen(server); 
server.listen(SERVER_PORT); 
console.log('Socket server listening on port : ' , SERVER_PORT); 
関連する問題