swoole我个人建议在linux环境下操作,毕竟在windows下有那么一点点麻烦。首先linux安装php和swoole环境(有手就行,建议百度)。 因为我们的业务是实现消息推送,也就是在完成特定操作时向swoole发送一个请求,然后swoole能够推送回来这条请求到指定的位置。 直接上代码
<?php
$ws = new swoole_websocket_server("0.0.0.0", 9501);
$ws->on('open', function ($ws, $request) {
echo "connection open:{$request->fd}\n";
});
$ws->on('message', function ($ws, $frame) {
$content = $frame->data;
echo "服务器接收到信息:".$content;
foreach ($ws->connections as $fd){
$ws->push($fd,$content);
}
});
$ws->on('close', function ($ws, $fd) {
echo "client-{$fd} is closed\n";
echo "已断开链接:{$fd}";
});
$ws->start();
然后微信小程序端有个连接websocket的方法,可以写在页面onload中:
wx.connectSocket({
url: 'ws://你的IP地址:9501/',
success:res=>{
console.log(res);
}
})
wx.onSocketOpen(function (res) {
socketOpen = true;
console.log(111)
})
wx.onSocketMessage(function (res) {
var result = JSON.parse(res.data)
var msg=result.msg;
that.data.message.push(msg)
var num=that.data.num+1;
if (result) {
that.setData({
num,
})
wx.setStorageSync('num', num)
wx.setStorageSync('message', that.data.message)
console.log(that.data.message);
console.log(that.data.num);
}
})
以上就是小程序中连接、接收以及处理swoole消息的代码,具体根据自己业务进行更改。 之后我们要给服务端一个触发事件,只要触发事件,就会向服务器发送请求及数据,然后服务器返回到他应去的地方。
send() {
if (socketOpen) {
var nickname = wx.getStorageSync('nickName')
if (nickname == "") {
nickname = "游客"
}
var data = '{"name":"' + nickname + '","msg":"' + inputMessage + '"}'
wx.sendSocketMessage({
data: data
})
}
},
到此核心代码完毕。 我们先来梳理一下流程: 服务端swoole开启–>小程序端onload中连接websocket–>触发事件向服务端推送消息–>onload中监听事件监听到消息存本地展示 OK,没问题
|