用nodejs快速实现微信小程序的websocket服务端
要使用ssl,首先你得有ssl证书,生产环境建议你去买一个ssl证书。开发环境你可以给自己生成一个ssl自签名证书临时用一下。
这里说下Linux 系统怎么通过openssl命令生成 证书。
首先执行如下命令生成一个key
openssl genrsa -des3 -out ssl.key 1024
然后他会要求你输入这个key文件的密码。不推荐输入。由于生成时候必须输入密码。你可以输入后 再删掉。
mv ssl.key xxx.key openssl rsa -in xxx.key -out ssl.key rm xxx.key
然后根据这个key文件生成证书请求文件
openssl req -new -key ssl.key -out ssl.csr
以上命令生成时候要填很多东西 一个个看着写吧(可以随便,毕竟这是自己生成的证书)
最后根据这2个文件生成crt证书文件
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
这里365是证书有效期 。这个随意。最后使用到的文件是key和crt文件。
nodejs websocket(ssl)服务端实现,wss-sample.js
use strict; var fs = require(fs); // youll probably load configuration from config var cfg = { ssl: true, port: 8080, ssl_key: ssl.key, ssl_cert: ssl.crt }; var httpServ = (cfg.ssl) ? require(https) : require(http); 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! ); }; if (cfg.ssl) { app = httpServ.createServer({ // providing server with SSL key/cert key: fs.readFileSync(cfg.ssl_key), cert: fs.readFileSync(cfg.ssl_cert) }, processRequest).listen(cfg.port); } else { app = httpServ.createServer(processRequest).listen(cfg.port); } // passing or reference to web server so WS would knew port and SSL capabilities var wss = new WebSocketServer({ server: app }); wss.on(connection, function(wsConnect) { wsConnect.on(message, function(message) { console.log(message); wsConnect.send(reply); }); });
运行这个案例, 你需要先安装ws库。
npm install ws
运行:
node wss-sample.js
你可以在浏览器打开,在浏览器控制台验证一下websocket是否可以连接:
var socket = new WebSocket(wss://localhost:8080/); socket.onmessage = function (e) { console.log(Server: + e.data); }; socket.send(your message);
如果是在express框架下实现websocket(ssl)。wss-express.js:
use strict var fs = require(fs); var https = require(https); var server = https.createServer( { key:fs.readFileSync(ssl.key), cert:fs.readFileSync(ssl.crt) } ); var url = require(url); var WebSocketServer = require(ws).Server; var wss = new WebSocketServer({ server: server }); var express = require(express); var app = express(); var port = 8080; app.use(function(req, res) { res.send({ msg: "hello" }); }); wss.on(connection, function connection(ws) { var location = url.parse(ws.upgradeReq.url, true); // you might use location.query.access_token to authenticate or share sessions // or ws.upgradeReq.headers.cookie (see http://stackoverflow.com/a/16395220/151312) ws.on(message, function incoming(message) { console.log(received: %s, message); }); ws.send(something); }); server.on(request, app); server.listen(port, function() { console.log(Listening on + server.address().port) });
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
词达人工具 - Fidder抓包获取答案