小程序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();
网友回复
腾讯混元模型广场里都是混元模型的垂直小模型,如何api调用?
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?