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

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 【mangosuch 】小程序server-3-搭建WebSocket 服务

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:738

高端HTML5响应式企业通用网

2020-05-06   浏览:519

html5响应式外贸网站英文版

2020-05-08   浏览:505

HTML5自适应律师工作室类网

2020-04-04   浏览:502

HTML5影视传媒文化公司类网

2020-05-12   浏览:496

【mangosuch 】小程序server-3-搭建WebSocket 服务

发布时间:2020-12-29  

1.安装 Node 模块使用 ws 模块来在服务器上支持 WebSocket 协议,下面使用 NPM 来安装:cd /var/www/wxpro npm install ws --save2.实现 WebSocket 服务器创建 websocket.js,实现 WebSocket 服务// 引入 ws 支持 We ...

 

 

 

1.安装 Node 模块

使用 ws 模块来在服务器上支持 WebSocket 协议,下面使用 NPM 来安装:

cd /var/www/wxpro npm install ws --save 2.实现 WebSocket 服务器

创建 websocket.js,实现 WebSocket 服务

// 引入 ws 支持 WebSocket 的实现 const ws = require('ws'); // 导出处理方法 exports.listen = listen; /** * 在 HTTP Server 上处理 WebSocket 请求 * @param {http.Server} server * @param {wafer.SessionMiddleware} sessionMiddleware */ function listen(server, sessionMiddleware) { // 使用 HTTP Server 创建 WebSocket 服务,使用 path 参数指定需要升级为 WebSocket 的路径 const wss = new ws.Server({ server, path: '/ws' }); // 监听 WebSocket 连接建立 wss.on('connection', (ws,request) => {// 要升级到 WebSocket 协议的 HTTP 连接 // 被升级到 WebSocket 的请求不会被 express 处理, // 需要使用会话中间节获取会话 sessionMiddleware(request, null, () => { const session = request.session; if (!session) { // 没有获取到会话,强制断开 WebSocket 连接 ws.send(JSON.stringify(request.sessionError) || "No session avaliable"); ws.close(); return; } // 保留这个日志的输出可让实验室能检查到当前步骤是否完成 console.log(`WebSocket client connected with openId=${session.userInfo.openId}`); serveMessage(ws, session.userInfo); }); }); // 监听 WebSocket 服务的错误 wss.on('error', (err) => { console.log(err); }); } /** * 进行简单的 WebSocket 服务,对于客户端发来的所有消息都回复回去 */ function serveMessage(ws, userInfo) { // 监听客户端发来的消息 ws.on('message', (message) => { console.log(`WebSocket received: ${message}`); ws.send(`Server: Received(${message})`); }); // 监听关闭事件 ws.on('close', (code, message) => { console.log(`WebSocket client closed (code: ${code}, message: ${message || 'none'})`); }); // 连接后马上发送 hello 消息给会话对应的用户 ws.send(`Server: 恭喜,${userInfo.nickName}`); }

编辑 app.js,调用 WebSocket 服务

// HTTP 模块同时支持 Express 和 WebSocket const http = require('http'); // 引用 express 来支持 HTTP Server 的实现 const express = require('express'); // 引用 wafer-session 支持小程序会话 const waferSession = require('wafer-node-session'); // 使用 MongoDB 作为会话的存储 const MongoStore = require('connect-mongo')(waferSession); // 引入配置文件 const config = require('./config'); // 引入 WebSocket 服务实现 const websocket = require('./websocket'); // 创建一个 express 实例 const app = express(); // 独立出会话中间件给 express 和 ws 使用 const sessionMiddleware = waferSession({ appId: config.appId, appSecret: config.appSecret, loginPath: '/login', store: new MongoStore({ url: `mongodb://${config.mongoUser}:${config.mongoPass}@${config.mongoHost}:${config.mongoPort}/${config.mongoDb}` }) }); app.use(sessionMiddleware); // 在路由 /me 下,输出会话里包含的用户信息 app.use('/me', (request, response, next) => { response.json(request.session ? request.session.userInfo : { noBody: true }); if (request.session) { console.log(`Wafer session success with openId=${request.session.userInfo.openId}`); } }); // 实现一个中间件,对于未处理的请求,都输出 "Response from express" app.use((request, response, next) => { response.write('Response from express'); response.end(); }); // 创建 HTTP Server 而不是直接使用 express 监听 const server = http.createServer(app); // 让 WebSocket 服务在创建的 HTTP 服务器上监听 websocket.listen(server, sessionMiddleware); // 启动 HTTP 服务 server.listen(config.serverPort); // 输出服务器启动日志 console.log(`Server listening at :${config.serverPort}`); 3.编辑 Nginx 配置 ssl.conf,添加 WebSocket 支持 #WebSocket 配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 443; server_name ; # 改为绑定证书的域名 #ssl 配置 ssl on; ssl_certificate 1_; # 改为自己申请得到的 crt 文件的名称 ssl_certificate_key 2_; # 改为自己申请得到的 key 文件的名称 ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; #WebSocket 配置 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; location / { proxy_pass http://127.0.0.1:8765; } } nginx -t nginx -s reload

本文标签

:备案管家服务帮您把复杂流程变简单,解决您在进行网站备案过程中遇到的效率低下和成功率不高的问题。个人300/2个域名,企业500/5个域名,qq1650004.