小程序js代码
var sotk = null;那么后端我们使用php swoole来写一个,代码如下
var socketOpen = false;
var wsbasePath = "ws://后端ip或域名:9504";
Page({
//监听指令
webSokcketMethods(e) {
let that = this;
sotk.onOpen(res => {
socketOpen = true;
console.log('监听 WebSocket 连接打开事件。', res);
that.sendSocketMessage("hello");
})
sotk.onClose(onClose => {
console.log('监听 WebSocket 连接关闭事件。', onClose)
socketOpen = false;
})
sotk.onError(onError => {
console.log('监听 WebSocket 错误。错误信息', onError)
socketOpen = false
})
sotk.onMessage(onMessage => {
var data = JSON.parse(onMessage.data);
console.log('监听WebSocket接受到服务器的消息事件。服务器返回的消息', data);
})
},
//发送消息
sendSocketMessage(msg) {
let that = this;
if (socketOpen) {
console.log('通过 WebSocket 连接发送数据', JSON.stringify(msg))
sotk.send({
data: JSON.stringify(msg)
}, function (res) {
console.log('已发送', res)
})
}
},
//关闭连接
closeWebsocket(str) {
if (socketOpen) {
sotk.close({
code: "1000",
reason: str,
success: function () {
console.log("成功关闭websocket连接");
}
})
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
connect() {
sotk = wx.connectSocket({
url: wsbasePath,
header: {
'content-type': 'application/x-www-form-urlencoded'
},
method: "POST",
success: res => {
console.log('小程序连接成功:', res);
},
fail: err => {
console.log('出现错误啦!!' + err);
wx.showToast({
title: '网络异常!',
})
}
})
this.webSokcketMethods();
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.connect();
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
this.closeWebsocket("bye")
sotk = null;
socketOpen = false;
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
this.closeWebsocket("bye")
sotk = null;
socketOpen = false;
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
<?php如果 使用wss,先去阿里或腾讯申请一个免费的证书,那么swoole的代码要改变下,
$server=new Swoole\Websocket\Server("0.0.0.0", 9504);
$server->on('open', function($server, $req) {
echo "connection open: {$req->fd}\n";
});
$server->on('message', function($server, $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
$server = new Swoole\Websocket\Server("0.0.0.0", 9504, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$server->set(array(
'worker_num' => 1,
'max_conn' => 65535,
'ssl_cert_file' => '/cert/domian.com.pem',
'ssl_key_file' => '/cert/domian.com.key',
// 'daemonize' => true,
'backlog' => 128,
));
// 'task_worker_num' => 1,
$server->on('open', function($server, $req) {
echo "connection open: {$req->fd}\n";
});
$server->on('message', function($server, $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();网友回复
有没有免费让ai自动帮你接管操作电脑的mcp服务?
mcp为啥用Streamable HTTP 替代 HTTP + SSE?
scratchjr有没有开源的前端html网页版本源代码?
多模态大模型能否根据ui交互视频来来模仿写出前端交互动画效果ui代码?
如何用阿里云oss+函数计算fc+事件总线EventBridge+消息队列+数据库+redis缓存打造一个高并发弹性系统?
阿里云函数计算 FC如何在海外节点搭建一个代理网络?
ai studio中gemini build的代码如何发布到github pages等免费网页托管上 ?
如何在cursor、qoder、trae中使用Claude Skills功能?
有没有不用u盘就能重装系统的开源工具?
python如何固定摄像头实时计算停车场停车位剩余数量?


