微信小程序 websocket
2016-11-21 13:17
190 查看
目的:使用Node js 搭建websocket (wss微信需要安全的websocket),演示不同群组聊天
需要知道一点点node相关操作即可
node 服务端代码
var https=require('https');
var ws=require('ws');
var fs=require('fs');
var keypath=process.cwd()+'/server.key';//秘钥文件
var certpath=process.cwd()+'/public.pem';
var options = {
key: fs.readFileSync(keypath),
cert: fs.readFileSync(certpath)
};
var server=https.createServer(options, function (req, res) {
res.writeHead(403);//403即可
res.end("This is a WebSockets server!\n");
}).listen(65500);
var wss = new ws.Server( { server: server } );
wss.on('connection', function(conn) {
conn.on('message', function(message) {
//传输内容为JSON
var mData = JSON.parse(message);
if(mData && mData.EVENT) {
switch(mData.EVENT) {
case "LOGIN":
// 新用户加入
uid = mData.USER.UID;
//把加入用户的信息和连接关联起来
conn.UserId = uid;
conn.GroupId = mData.PKG.GROUPID;
//console.log('User:{\'uid\':' + newUser.uid + ',\'nickname\':' + newUser.nick + '}coming on protocol websocket draft ' + conn.protocolVersion);
console.log('connected user' + wss.clients.length);
console.log(uid+"///"+mData.PKG.GROUPID);
// 把新用户的信息广播给在线用户
for(var i = 0; i < wss.clients.length; i++) {
//同组的才广播
if(wss.clients[i].GroupId==mData.PKG.GROUPID){
wss.clients[i].send("new member");
}
}
break;
case "TEXT":
console.log(mData);
//用户发送内容
var content = mData.PKG.CONTENT;
//发给目标组
var gId = mData.PKG.GROUPID;
//发送给同组成员
for(var i = 0; i < wss.clients.length; i++) {
//发送给同组的所有成员
if(gId==wss.clients[i].GroupId){
wss.clients[i].send(content);
}
}
//SAVE DB
break;
default:
break;
}
} else {
console.log(mData);
}
});
conn.on('error', function() {
console.log(Array.prototype.join.call(arguments, ", "));
});
conn.on('close', function() {
console.log('someone offline')
});
});
node 客户端
微信小程序测试:
需要知道一点点node相关操作即可
node 服务端代码
var https=require('https');
var ws=require('ws');
var fs=require('fs');
var keypath=process.cwd()+'/server.key';//秘钥文件
var certpath=process.cwd()+'/public.pem';
var options = {
key: fs.readFileSync(keypath),
cert: fs.readFileSync(certpath)
};
var server=https.createServer(options, function (req, res) {
res.writeHead(403);//403即可
res.end("This is a WebSockets server!\n");
}).listen(65500);
var wss = new ws.Server( { server: server } );
wss.on('connection', function(conn) {
conn.on('message', function(message) {
//传输内容为JSON
var mData = JSON.parse(message);
if(mData && mData.EVENT) {
switch(mData.EVENT) {
case "LOGIN":
// 新用户加入
uid = mData.USER.UID;
//把加入用户的信息和连接关联起来
conn.UserId = uid;
conn.GroupId = mData.PKG.GROUPID;
//console.log('User:{\'uid\':' + newUser.uid + ',\'nickname\':' + newUser.nick + '}coming on protocol websocket draft ' + conn.protocolVersion);
console.log('connected user' + wss.clients.length);
console.log(uid+"///"+mData.PKG.GROUPID);
// 把新用户的信息广播给在线用户
for(var i = 0; i < wss.clients.length; i++) {
//同组的才广播
if(wss.clients[i].GroupId==mData.PKG.GROUPID){
wss.clients[i].send("new member");
}
}
break;
case "TEXT":
console.log(mData);
//用户发送内容
var content = mData.PKG.CONTENT;
//发给目标组
var gId = mData.PKG.GROUPID;
//发送给同组成员
for(var i = 0; i < wss.clients.length; i++) {
//发送给同组的所有成员
if(gId==wss.clients[i].GroupId){
wss.clients[i].send(content);
}
}
//SAVE DB
break;
default:
break;
}
} else {
console.log(mData);
}
});
conn.on('error', function() {
console.log(Array.prototype.join.call(arguments, ", "));
});
conn.on('close', function() {
console.log('someone offline')
});
});
node 客户端
var ws = new WebSocket("wss://www.x'x'x.com:65500/"); ws.onopen = function() { alert("Opened"); ws.send('{"EVENT":"LOGIN","USER":{"UID":"123"},"PKG":{"GROUPID":112,"MESSAGE":"OK"}}'); }; ws.onmessage = function (evt) { alert(evt.data); }; ws.onclose = function() { alert("Closed"); }; ws.onerror = function(err) { alert("Error: " + err); };
<!DOCTYPE html> <html> <body> <h1>WebSocket</h1> <script src="client.js"></script> </body> </html>
微信小程序测试:
wx.connectSocket({ url: WSS_URL }) wx.onSocketOpen(function (res) { wx.sendSocketMessage({ data: '{"EVENT":"' + `${mtype}` + '","USER":{"UID":"' + `${getApp().globalData.uid}` + '"},"PKG":{"GROUPID":112,"CONTENT":"' + `${value}` + '"}}' }) }) wx.onSocketMessage(function (res) { log(res.data) })
相关文章推荐
- 用nodejs快速实现微信小程序的websocket服务端
- 微信小程序 网络API Websocket详解
- java与微信小程序实现websocket长连接
- 微信小程序websocket实现聊天功能
- 微信小程序WebSocket实现聊天对话功能
- 微信小程序示WebSocket长连接应用场景例利用腾讯云仅限开发案例二
- 微信小程序API之网络(四)WebSocket
- 微信小程序和服务器通信-WebSocket
- 微信小程序webSocket的设置
- 微信小程序 WebSocket详解及应用
- 微信小程序基于node.js的websocket服务器搭建和SSL证书申请、配置全家桶
- 微信小程序——监听websocket数据
- 【微信小程序开发•系列文章七】websocket
- 微信小程序配置websocket环境及如何在小程序上使用做个简单的解释吧
- 微信小程序——连接webSocket
- 微信小程序WebSocket报错:Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
- 微信小程序 websocket 实现SpringMVC+Spring+Mybatis
- 微信小程序 springwebsocket 报错: Error during WebSocket handshak 403
- 微信小程序之WebSocket