添加SSL过socket.io后无法发出消息(Not able emit message after

2019-10-29 06:11发布

我内置了使用节点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工作正常。

可能是什么问题? 从很长一段时间坚持了这一点。 请帮忙。

Answer 1:

我要始终保持SSL负担, 安全通道 ,由您(如443),并将所有传入流量定义的安全端口上侦听的SSL代理,已经解密,到另一个端口在您的非SSL应用接听(通常为80) 。

这里有一个简单的安全通道配置的要点是: https://gist.github.com/mbenedettini/5911415



Answer 2:

我几天后解决了这个问题。

问题是在客户端上以下行。

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

我们不应该添加{secure : true} ,所以线变得简单

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

我如何来了解这个解决方案? 我学会了如何使用Chrome浏览器开发工具分析网络的Socket数据流量

很快我发现所述客户端被发射{secure : true}作为数组的第一元素。 这改变了整个对象的结构。 由于所有这些服务器的结果不能够解决的事件名称,因为第一个数组元素是不包含事件名称。

我删除{secure : true}和它的工作。 :)



文章来源: Not able emit message after adding ssl over socket.io