有没有办法从 NativeScript 应用程序通过 SSL 与 WebSocket 通信?

Posted

技术标签:

【中文标题】有没有办法从 NativeScript 应用程序通过 SSL 与 WebSocket 通信?【英文标题】:Is there a way to communicate with WebSocket over SSL from NativeScript app? 【发布时间】:2017-02-03 13:16:24 【问题描述】:

目前我正在编写一个将通过 SSL 与 WebSocket 通信的 NS 应用程序。这是服务器的代码(server.js):

var fs = require('fs');
var cfg = 
 port: 8082,
 ssl_key: fs.readFileSync('keys/server.key'),
 ssl_cert: fs.readFileSync('keys/server.crt'),
 ca: fs.readFileSync('keys/ca.crt')
;

var httpServ = require('https');

var WebSocketServer = require('ws').Server;
var app = null;

// dummy request processing
var processRequest = function( req, res ) 
    res.writeHead(200);
    res.end("All glory to WebSockets!\n");                  
;

 app = httpServ.createServer(

      // providing server with  SSL key/cert
      key: cfg.ssl_key,
      cert: cfg.ssl_cert,
      ca: cfg.ssl.ca,   
      passphrase: '1234',
      requestCert: true,
      rejectUnauthorized: false,

      , processRequest ).listen( cfg.port );

var wss = new WebSocketServer(  server: app  );

wss.on('connection', function(ws) 
console.log("Connected!");
ws.on('message', function(message) 
console.log('received: %s', message);
);
ws.send('something');
);

服务器运行良好,没有问题。下面是客户端代码(wsclient.js):

const WebSocket = require('ws');
const ws = new WebSocket('wss://localhost:8082');
ws.on('open', function open() 
  ws.send("dummy");  
  ws.on('error', function(evt) 
      console.log("The socket had an error", evt.error);
  );
);

当我通过输入node wsclient.js 运行客户端时,它会抛出以下错误:

Error: unable to verify the first certificate

显然,错误是由于未向请求提供证书信息引起的。但我不知道如何在我的客户端代码中完成这项工作。非常感谢任何线索或建议。

【问题讨论】:

【参考方案1】:

终于找到答案了:

const WebSocket = require('ws');
const ws = new WebSocket('wss://localhost:8082',
    key: fs.readFileSync('./keys/client.key'),
    cert: fs.readFileSync('./keys/client.crt'),
    ca: fs.readFileSync('./keys/ca.crt')
);
ws.on('open', function open() 
  ws.send("dummy");  
  ws.on('error', function(evt) 
      console.log("The socket had an error", evt.error);
  );
);

现在可以了!

【讨论】:

以上是关于有没有办法从 NativeScript 应用程序通过 SSL 与 WebSocket 通信?的主要内容,如果未能解决你的问题,请参考以下文章

NativeScript - 如何将图像保存/添加到手机的默认图库应用程序中

如何在 NativeScript 项目中隐藏 TypeScript 自动生成的文件

vue js nativescript firebase web 应用到 android/ios 应用

在点击android push-plugin通知后,Nativescript会调用某些操作

Nativescript CameraPlus 预览也放大了

如何在 nativescript-vue 中渲染编写复杂的数学方程? [关闭]