欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 用nodejs快速实现微信小程序的websocket服务端

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:789

HTML5自适应律师工作室类网

2020-04-04   浏览:654

高端HTML5响应式企业通用网

2020-05-06   浏览:560

html5响应式外贸网站英文版

2020-05-08   浏览:545

HTML5影视传媒文化公司类网

2020-05-12   浏览:543

用nodejs快速实现微信小程序的websocket服务端

发布时间:2020-12-21  

微信小程序对第三方服务端的网络通信方式支持https和Websocket。WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。为了解决HTTP协议效率低下的问题,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。WebSocket在数据传输的稳定性和数据传输量的大小方面,具有很大的性能优势。有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的websocket却是接近于html5原始websocket协议,socket.io居然没有用武之地了。当然情况也没有惨到需要你自己一步一步去实现websocket服务端,我们的大node有很多websocket库,ws就是其中一个,号称最轻量级,最快。ws的用法比较简单,直接看github说明(https://github.com/websockets/ws)就可以。我这里着重讲的是针对微信小程序实现的加入ssl的websocket实现。

要使用ssl,首先你得有ssl证书,生产环境建议你去买一个ssl证书。开发环境你可以给自己生成一个ssl自签名证书临时用一下。

这里说下Linux 系统怎么通过openssl命令生成 证书。

首先执行如下命令生成一个key

openssl genrsa -des3 -out ssl.key 1024

1

然后他会要求你输入这个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'); // you'll 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!\n'); }; 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

你可以在浏览器打开https://localhost:8080,在浏览器控制台验证一下websocket是否可以连接:

var socket = new WebSocket('wss://localhost:8080/'); socket.onmessage = function (e) { console.log('Server: ' + e.data); }; socket.send('your message');

1

2

3

4

5

6

7

如果是在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 ) 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) });

简单的微信小程序websocket服务端实现了。