swoole实现微信小程序websocket

准备

  1. wss的形式,微信小程序后台如果你配置的时候不加端口,默认是443端口,类似于我们的https,而ws就类似于http
  2. Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR 当你遇到这个错误就说明你的ssl配置有问题
  3. 微信小程序要求使用wss和https,所以你想正式环境可以使用,就必须使用这两种方式,很多网上资料我看都是ws的形式,那是因为微信那个开发工具可以设置成不进行证书的判断.
  4. 下面的swoole部分不会很详细你必须有一定websocket的基础

服务端

  1. 小程序后台进行websocket的配置
    我配置了两个地址是 easy.xxxx 和 easy.xxx:9503 ,其中9503是我之后要用的端口,easy.xxx是你的域名,不知道不加行不行,微信有修改次数限制我就不进行测试了
  2. swoole部分代码
//和普通的websocket不同的是加了SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL
$serv = new swoole_websocket_server(IP,端口,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL) ) ;  
//存放你证书的地址
$setArray['ssl_cert_file'] = $this->ssl_cert_file;
$setArray['ssl_key_file'] = $this->ssl_key_file;
### 微信小程序使用Swoole实现发送语音功能 #### 准备工作 为了实现微信小程序中通过Swoole服务端框架发送语音消息,需先完成环境搭建。这包括但不限于安装配置PHP开发环境以及Swoole扩展[^1]。 #### 创建WebSocket服务器 利用Swoole创建一个WebSocket服务器用于处理来自客户端的消息传输请求。下面是一个简单的WebSocket服务器示例: ```php <?php $server = new Swoole\WebSocket\Server("0.0.0.0", 9501); $server->on('open', function (Swoole\WebSocket\Server $server, $request) { echo "connection open: {$request->fd}\n"; }); $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { // 处理接收到的数据帧 $data = json_decode($frame->data); if ($data && isset($data->type)) { switch ($data->type) { case 'voice': file_put_contents(__DIR__ . '/uploads/' . uniqid() . '.amr', base64_decode($data->content)); break; } foreach ($server->connections as $fd) { $server->push($fd, $frame->data); } } else { $server->push($frame->fd, "Invalid message format"); } }); $server->start(); ``` 此代码片段展示了如何监听`message`事件并针对不同类型的消息执行相应操作,在这里特别关注了当消息类型为`voice`时保存上传的语音文件到指定目录下。 #### 小程序前端部分 对于微信小程序而言,则需要编写相应的页面逻辑来录制用户的语音并将录音数据传送给上述建立好的WebSocket连接。以下是简化版的小程序JS代码样例: ```javascript Page({ data: { socketOpen: false, socketMsgQueue: [] }, onLoad(options){ wx.connectSocket({url:'ws://yourdomain.com:9501'}); wx.onSocketOpen((res)=>{ console.log('WebSocket opened'); this.setData({socketOpen:true}); while(this.data.socketMsgQueue.length>0){ let msg=this.data.socketMsgQueue.shift(); wx.sendSocketMessage(msg); } }); wx.onSocketError(function(res){ console.error('WebSocket error:', res.errMsg); }); wx.startRecord({ success:(res)=>{this.tempFilePath=res.tempFilePath;}, fail:(err)=>console.warn(err), complete:()=>wx.stopRecord() }) }, sendVoice(){ const voiceData={ type:"voice", content:this.tempFilePath.split(',')[1] }; if(!this.data.socketOpen){return this.data.socketMsgQueue.push(voiceData);} wx.sendSocketMessage({ data:JSON.stringify(voiceData) }); } }) ``` 这段脚本实现了启动记录、停止记录以及向WebSocket推送已编码成Base64字符串形式的声音二进制流等功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值