0

Node JS と socket.io を使用してアプリケーションを作成しました。正常に動作していました。アプリケーションを安全な接続に移行する必要があったため、SSL をサポートするようにコードを変更しました。

しかし、今はできませんsocket.emit。サーバーもクライアントもメッセージを送信できません。

接続は正常に行われますが、その後は何も出力されません。

これがコードです。

サーバ側

var fs = require( 'fs' );

var options = {
       key:  fs.readFileSync('/etc/httpd/conf.d/ssl/*.xyz.in.key'),
       cert: fs.readFileSync('/etc/httpd/conf.d/ssl/xyz.in.crt'),
       requestCert:        true,
       rejectUnauthorized: false  // Tried both, with and without this line.
  };

var io = require( 'socket.io' ).listen( 8888, options );

io.sockets.on('connection', OnConnection );

io.set("origins", "*:*"); // Tried with and without this line.

// Called when a connection is made with a new Client.
function OnConnection ( socket )
{
    console.log( socket.id + " connected" ); // This line gets printed.
    socket.on('ev_SendMsgForApproval', OnMsgReceivedForModApproval );
}

function OnMsgReceivedForModApproval( data )
{
     console.log( data ); //This does not get executed. :(
}

クライアント側

var socket = io.connect("https://xyz.com:8888", {secure : true} );

// This message get called for sure.
function OnMsgSendClick()
{
    console.log( "Hi" );  // This gets printed on browser's console.
    socket.emit( 'ev_SendMsgForApproval', { chatMsg: "Hi" } );
    return false;
}

サーバーからの発行も試みましたが、そのデータはクライアントにも届きません。デバッグでは、サーバーが何かを発行したことを確認できますが、それはクライアントには届きません。

これはすべて、SSLなしで正常に機能していました。

問題は何ですか?長い間これにこだわっています。助けてください。

4

2 に答える 2

1

私は常にstunnelにssl の負担を任せます。stunnelは、あなたが定義した安全なポート (443 など) をリッスンし、すべての着信トラフィックを既に復号化して、非 SSL アプリケーションがリッスンしている別のポート (通常は 80) に転送します。 .

ここに、単純な stunnel 構成の要点があります: https://gist.github.com/mbenedettini/5911415

于 2013-07-04T15:07:23.713 に答える
0

数日後に問題を解決しました。

問題は、クライアント側の次の行にありました。

var socket = io.connect("https://xyz.com:8888", {secure : true} );

を追加することは想定されていない{secure : true}ため、行は次のようになります。

var socket = io.connect("https://xyz.com:8888" );

このソリューションを知ったきっかけは? Chrome 開発ツールを使用して Web ソケットのデータ トラフィックを分析する方法を学びました

すぐに、クライアントが{secure : true}配列の最初の要素として発行されていることがわかりました。これにより、オブジェクト全体の構造が変更されました。最初の配列要素にイベント名が含まれていなかったため、このサーバーはイベント名を解決できませんでした。

私は削除{secure : true}し、それは働いた。:)

于 2013-07-06T18:29:08.760 に答える