【问题标题】:Unable to connect secured websocket无法连接安全的 websocket
【发布时间】:2019-07-17 13:43:46
【问题描述】:

使用 nodejs 这个客户端代码不起作用:

var sock= require('websocket').w3cwebsocket;


var sock= new W3CWebSocket("wss://" + 'www.mysite.com'+ ':31333');

sock.onopen = function (evt)
    {
        console.log("it never reaches here");


//..................
}

实际上,当我的 nodejs 服务器不使用 SSL 时它可以工作,所以这段代码曾经可以工作:

var sock= new W3CWebSocket("ws://" + 'www.mysite.com'+ ':31333');

服务器代码如下所示:

var ws = require("./nodejs-websocket");
var fs = require('fs');

var options = {
    secure: true,
    key: fs.readFileSync('ssl/mysite.com.key'),
    cert: fs.readFileSync('ssl/mysite.com.crt')
};

var server = ws.createServer(options, function (conn)
    {
        console.log("New connection")
        conn.on("text", function (str)
            {

               //some code here

            });
        conn.on("close", function (code, reason)
            {
                console.log("Connection closed")
            });

    }).listen(31333);

通过浏览器,我可以使用 Websockets 与该服务器通信。但不是来自 Linux 命令行。 如何让它在 Linux 命令行下运行?

【问题讨论】:

    标签: node.js sockets ssl websocket socket.io


    【解决方案1】:

    我不能对你正在使用的图书馆说太多。但是对于最近的 .并改用这个库 socket.io-redis socket.io 它们特别允许您使用安全连接。下面是一个如何工作的代码示例,上面的链接将指向文档。

    var redis = require('redis');
    
    var client = redis.createClient(config.redisPort,config.redis,
      {auth_pass: config.reDISCACHEKEY, tls: {servername: config.redis}}); //creates a new client
    var sclient=redis.createClient(config.redisPort,config.redis,
      {auth_pass: config.reDISCACHEKEY, tls: {servername: config.redis}}); //creates a new client
    
    var io = require('socket.io').listen(app);
    var redis = require('socket.io-redis');
    
    io.adapter(redis({pubClient:client,subClient:sclient}))
    
    io.on('connection', function(socket){
    
      client.set(socket.handshake.query.userName, socket.id);
    
        //sets what happens when a socket disconnects
        //deletes socket information
    
       socket.on('disconnect', function(){
         let name=socket.handshake.query.userName;
         client.del(name, function(err, reply) {
         });
       });
       socket.on('message', function(msg, func){
         let name=socket.handshake.query.userName;
         let sockectObj=msg;
         io.emit('Message', sockectObj);
       });
     });
    

    如果需要更多信息,请告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 2015-05-25
      • 1970-01-01
      • 2017-12-17
      • 2014-07-06
      • 1970-01-01
      • 2014-04-09
      • 2021-10-20
      相关资源
      最近更新 更多