【黄啊码】微信小程序+php实现即时通讯聊天功能

一、PHP7安装Swoole扩展

PHP swoole 扩展下载地址

Github:https://github.com/swoole/swoole-src/tags

php官方扩展库:http://pecl.php.net/package/swoole

开源中国:http://git.oschina.net/swoole/swoole/tags

1、自定义安装

# 下载wget https://pecl.php.net/get/swoole-4.3.3.tgz# 解压tar zxf swoole-4.3.3.tgz# 编译安装扩展# 进入目录cd swoole-4.3.3 # 执行phpize命令,产生出configure可执行文件
# 如果不知道phpize路径在哪里 可以使用which phpize查看相应路径/usr/bin/phpize   # 进行配置  如果不知道php-config路径在哪里 可以使用which php-config   查看相应路径./configure --with-php-config=/usr/bin/php-config   # 编译和安装make && make install vi /etc/php.ini复制如下代码extension=swoole.so放到你所打开或新建的文件中即可,无需重启任何服务# 查看扩展是否安装成功php -m|grep swoole

2、宝塔面板安装PHP swoole扩展

如果感觉上述安装较为复杂,可以使用宝塔面板实现一键安装

二、配置nginx反向代理

1、使用xshell连接远程阿里云服务器

2、使用命令(find / -name nginx.conf)查找nginx.conf所在的配置文件

3、使用命令(vim /etc/nginx/nginx.conf)查找进入到vim编辑器

查看到可以引入/etc/nginx/conf.d/下的配置文件信息

4、使用命令(cd /etc/nginx/conf.d/)进入到该路径下,并新建配置文件:study.lishuo.net.conf

5、配置nginx反向代理,实现访问study.lishuo.net域名转发端口号到127.0.0.1:9511也就是转发到webscoket运行的端口号        


# 反向代理的规则 study 这个名字自己随便起
upstream study{server 127.0.0.1:9511;
}
server {listen       80;server_name  study.lishuo.net;error_page 404 /404.html;location = /404.html {}location / {index index.php index.html index.htm;if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=/$1  last;}#wss配置client_max_body_size 100m;proxy_redirect off;proxy_set_header Host $host;# http请求的主机域名proxy_set_header X-Real-IP $remote_addr;# 远程真实IP地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#反向代理之后转发之前的IP地址proxy_read_timeout 604800s;#websocket心跳时间,默认是60sproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_pass http://study;}error_page 500 502 503 504 /50x.html;location = /50x.html {}#添加下列信息,配置Nginx通过fastcgi方式处理您的PHP请求。location ~ .php$ {fastcgi_pass 127.0.0.1:9001;   #Nginx通过本机的9000端口将PHP请求转发给PHP-FPM进行处理。fastcgi_index index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include fastcgi_params;   #Nginx调用fastcgi接口处理PHP请求。}}

三、微信小程序socket合法域名配置

1、登录到微信开放平台https://mp.weixin.qq.com/

2、开发=>开发管理=>开发设置,完成合法域名设置

3、到此配置已经完成了,接下来就是功能实现了,微信小程序+PHP代码

四、效果演示和代码

1、小程序端代码

小程序页面代码所在路径 /pages/contact/contact.wxml


<!--pages/contact/contact.wxml--><view><scroll-view scroll-y scroll-into-view='{{toView}}' style='height: {{scrollHeight}};'><!-- <view class='scrollMsg'> --><block wx:key wx:for='{{msgList}}' wx:for-index="index"><!-- 单个消息1 客服发出(左) --><view wx:if='{{item.speaker=="server"}}' id='msg-{{index}}' style='display: flex; padding: 2vw 11vw 2vw 2vw;'><view style='width: 11vw; height: 11vw;'><image style='width: 11vw; height: 11vw; border-radius: 10rpx;' src='https://cdn.pixabay.com/photo/2020/02/10/12/47/girl-4836394__340.jpg'></image></view><view style='width: 4vw; height: 11vw; margin-left: 0.5vw; display: flex; align-items: center; z-index: 9;'><view class="triangle_border_left"></view></view><view class='leftMsg'>{{item.content}}</view></view><!-- 单个消息2 用户发出(右) --><view wx:else id='msg-{{index}}' style='display: flex; justify-content: flex-end; padding: 2vw 2vw 2vw 11vw;'><view class='rightMsg'>{{item.content}}</view><view style='width: 4vw; height: 11vw; margin-right: 0.5vw; display: flex; align-items: center; z-index: 9;'><view class="triangle_border_right"></view></view><view style='width: 11vw; height: 11vw;'><image style='width: 11vw; height: 11vw; border-radius: 10rpx;' src='https://cdn.pixabay.com/photo/2021/09/24/10/00/chick-6652163__340.jpg'></image></view></view></block><!-- </view> --><!-- 占位 --><view style='width: 100%; height: 18vw;'></view>
</scroll-view><view class='inputRoom' style='bottom: {{inputBottom}}'><image style='width: 7vw; margin-left: 3.2vw;' src='https://img95.699pic.com/element/40030/6429.png_300.png' mode='widthFix'></image><input bindconfirm='sendClick' adjust-position='{{false}}' value='{{inputVal}}' confirm-type='send' bindfocus='focus' bindblur='blur'></input>
</view>
</view>

2、小程序页面样式代码所在路径 /pages/contact/contact.wxss

/* pages/contact/contact.wxss */page {background-color: #f1f1f1;
}.inputRoom {width: 100vw;height: 16vw;border-top: 1px solid #cdcdcd;background-color: #f1f1f1;position: fixed;bottom: 0;display: flex;align-items: center;z-index: 20;
}input {width: 76vw;height: 9.33vw;background-color: #fff;border-radius: 40rpx;margin-left: 2vw;padding: 0 3vw;font-size: 28rpx;color: #444;
}.leftMsg {font-size: 35rpx;color: #444;line-height: 7vw;padding: 2vw 2.5vw;background-color: #fff;margin-left: -1.6vw;border-radius: 10rpx;z-index: 10;
}.rightMsg {font-size: 35rpx;color: #444;line-height: 7vw;padding: 2vw 2.5vw;background-color: #96EB6A;margin-right: -1.6vw;border-radius: 10rpx;z-index: 10;
}/*向左*/.triangle_border_left {width: 0;height: 0;border-width: 10px 30px 30px 0;border-style: solid;border-color: transparent #fff transparent transparent;/*透明       黄   透明        透明 */margin: 40px auto;position: relative;
}/*向右*/.triangle_border_right {width: 0;height: 0;border-width: 0px 30px 20px 13px;border-style: solid;border-color: transparent transparent transparent #96EB6A;/*透明       透明        透明         黄*/margin: 40px auto;position: relative;}

小程序配置文件代码所在路径 /pages/contact/contact.json

{"navigationBarTitleText":"柯作客服","usingComponents": {}
}

小程序业务逻辑代码所在路径 /pages/contact/contact.js

// pages/contact/contact.js
const app = getApp();
var inputVal = '';
var msgList = [];
var windowWidth = wx.getSystemInfoSync().windowWidth;
var windowHeight = wx.getSystemInfoSync().windowHeight;
var keyHeight = 0;/*** 初始化数据*/
function initData(that) {//输入框的内容inputVal = '';//消息列表,包含客服和用户的聊天内容msgList = [{speaker: 'server',contentType: 'text',content: 'Hi,亲爱的小主,终于等到您啦!欢迎来到柯作店铺,很荣幸为您服务。'},{speaker: 'customer',contentType: 'text',content: '你高兴的太早了'}]that.setData({msgList,inputVal})
}Page({/*** 页面的初始数据*/data: {scrollHeight: '100vh',inputBottom: 0},/*** 生命周期函数--监听页面加载*/onLoad: function(options) {//初始化websocket连接this.chat();//监听心跳的方法this.webSocketXin();//聊天方法initData(this);//监听消息wx.onSocketMessage(res=>{//追加到消息列表里msgList.push(JSON.parse(res.data))inputVal = '';this.setData({msgList,inputVal});})},//页面卸载时间onUnload(){wx.closeSocket();},/*** 获取聚焦*/focus: function(e) {keyHeight = e.detail.height;this.setData({scrollHeight: (windowHeight - keyHeight) + 'px'});this.setData({toView: 'msg-' + (msgList.length - 1),inputBottom: keyHeight + 'px'})//计算msg高度// calScrollHeight(this, keyHeight);},//失去聚焦(软键盘消失)blur: function(e) {this.setData({scrollHeight: '100vh',inputBottom: 0})this.setData({toView: 'msg-' + (msgList.length - 1)})},/*** 发送点击监听*/sendClick: function(e) {//客户发的信息let customerMsg = {uid: 10,speaker: 'customer',contentType: 'text',content: e.detail.value};//关闭心跳包this.webSocketXin(60000, false)//发送给websocketwx.sendSocketMessage({data: JSON.stringify(customerMsg),success:res=>{//重启心跳包this.webSocketXin(40000, true)}  })//追加到消息列表里msgList.push(customerMsg)inputVal = '';this.setData({msgList,inputVal});},/*** 退回上一页*/toBackClick: function() {wx.navigateBack({})},/*** websocket*/chat(){//进行连接php的socketwx.connectSocket({//wss 协议相当于你要有一个ssl证书,https//ws  就相当于不实用证书  httpurl: 'ws://study.lishuo.net',success: function () {console.log('websocket连接成功~')},fail: function () {console.log('websocket连接失败~')}})},/*** 监听websocket心跳连接的方法*/webSocketXin(time=60000,status=true){var timing;if(status == true){timing = setInterval(function () {console.log("当前心跳已重新连接");//循环执行代码wx.sendSocketMessage({data: JSON.stringify({type: 'active'}),fail(res) {//关闭连接wx.closeSocket();//提示wx.showToast({title: '当前聊天已断开',icon:'none'})clearInterval(timing);console.log("当前心跳已关闭");}});}, time) //循环时间,注意不要超过1分钟  } else {//关闭定时器clearInterval(timing);console.log("当前心跳已关闭");}}})

2、服务端代码(PHP代码)

wechat_websocket.php

<?php//创建WebSocket Server对象,监听0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9511);//监听WebSocket连接打开事件
$ws->on('Open', function ($ws, $request) {echo $request->fd . '我连接上了';
});//监听WebSocket消息事件
$ws->on('Message', function ($ws, $frame) {//把前台传过来的json字符串转成数组$params = json_decode($frame->data, true);//判断是否是心跳消息,如果是心跳消息if (isset($params['type']) && isset($params['type'])=='active'){echo '这是心跳监听消息';}else{//先判断当前用户有没有正在连接if (isset($params['uid']) && !empty($params['uid'] == 666)) {//去用户表查询当前用户  fd$fd = 2;} else {$fd = 1;}//客服id$ws->push($fd, json_encode($params, JSON_UNESCAPED_UNICODE));}
});//监听WebSocket连接关闭事件
$ws->on('Close', function ($ws, $fd) {echo "client-{$fd} is closed\n";
});$ws->start();

五、代码已经编写完了

1、把服务端代码上传到Linux操作系统里

2、然后切到该目录下进行运行php wechat_websocket.php

好了,今天的分享就到这里,有问题的留个言,别忘了一键三连,下次我们还会再见!

我是黄啊码,码字的码,退。。。退。。。退。。。朝!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38653.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【黄啊码】我问ChatGPT如何学习PHP语言,它是这么说的

大家好&#xff0c;我是黄啊码&#xff0c;最近大家都在流行整chatGPT&#xff0c;今天它来了&#xff01;别人都在吹嘘它万能&#xff0c;能够代替程序员写代码&#xff0c;今天我们就让它教教我们学习PHP语言&#xff1a; 黄啊码&#xff1a; 如何有效学习php语言&#xff1…

【亲测可运营】PHP匿名在线聊天室/语音聊天室/多国语言版在线聊天室

简介 PHP匿名在线聊天室源码/自定义群组聊天系统/可设置密码支持自适应多端访问运营版&#xff0c;一款支持多国语言的在线群聊系统源码&#xff0c;可以新建一个群组&#xff0c;然后设置密码&#xff0c;或者公开访问都可以&#xff0c;聊天都是匿名的&#xff0c;方式还是不…

开悟和通货膨胀!!!

大家好&#xff0c;我是txp&#xff0c;今天给大家聊一个非技术性的话题&#xff1a;开悟和抵抗通货膨胀。 不知道大家看到这两个词的时候&#xff0c;是什么感觉&#xff0c;可以停顿一下&#xff0c;让自己思考一下&#xff01; 在展开这个话题之前&#xff0c;我先总结一下自…

网红马斯克的无聊公司

西雅图IT圈&#xff1a;seattleit 【今日作者】拖拉机 IT圈里烧柴油的干货担当 16年底 美国钢铁侠 埃隆马斯克 成立了一家叫做 The Boring Company &#xff08;无聊公司&#xff09; 的微商公司 开始的时候 马斯克声称这家公司 主要从事挖隧道这种无聊的工作 然而这家公司的主…

UE4 摇杆JoyStick-Touch Interface Setup

1.创建 2、属性 USTRUCT() struct FTouchInputControl {GENERATED_USTRUCT_BODY()//自由活动图片// basically mirroring SVirtualJoystick::FControlInfo but as an editable classUPROPERTY(EditAnywhere, Category"Control", meta(ToolTip"For sticks, this …

算法:第一节课Master定理

1、ctex&#xff1a;要求用Tex编辑器进行作业的书写 2、与东大本科有差距&#xff0c;还需要多点努力才行。 3、 4、考试不考概念 5、 6、时间复杂度和空间复杂度 7、算法好坏的评价标准 8、基本运算 9、时间复杂度 10、第二章&#xff1a;重要的来了 11、 12、 13、 假设矩阵…

马斯克 超级计算机,特斯拉布局超级计算机 野心是全自动驾驶

美东时间周一举行的2021年计算机视觉和模式识别会议上&#xff0c;特斯拉人工智能与自动驾驶视觉部门主管安德烈卡帕蒂(Andrej Karpathy)公布了特斯拉超级计算机集群Dojo。卡帕蒂表示&#xff0c;Dojo尚未进行基准测试&#xff0c;根据FLOPS的排名来看&#xff0c;第五位的英伟…

100offer举办的「寻找实干和坚持的技术力量」开源项目投票排名分析程序

2019独角兽企业重金招聘Python工程师标准>>> 由于100offer举办的「寻找实干和坚持的技术力量」开源项目投票活动没有按照票数排序的功能&#xff0c;所以本文写了个小程序来实现这个功能&#xff0c;代码如下&#xff1a; import org.jsoup.Jsoup; import org.jsoup…

qt解析joystick飞行摇杆按键信息

项目场景&#xff1a; 最近入手一款图马斯特飞行摇杆&#xff0c;本来是想用来玩游戏&#xff0c;但是想到以前做过遥控车&#xff0c;如果用这个来代替遥控器应该比较爽&#xff0c;于是用Qt编写了一个解析手柄按键信息的demo软件。 测试效果还不错&#xff1a;下面是demo软…

马思特中国实现2020年全年盈利目标300%

近日&#xff0c;全球著名的金属加工液解决方案企业马思特液体解决方案&#xff08;以下称“马思特”&#xff09;公布了2020年度中国区业绩&#xff0c;基于公司在技术研发和人力资源两方面的投入和行业优势&#xff0c;2020年度马思特中国在疫情蔓延下仍然逆势向上&#xff0…

马斯洛提出动机理论_动机理论:工作背后的动力机制

是什么在激励你努力工作呢?下面的要素你是如何排序的?通过填写这样的题项,我们大致能了解到一个人工作的动机是什么,作为雇主我们能根据自身的情况挑选我们需要的某种动机类型的员工,或者设计出更高效的方式来更好满足已有员工需求,为员工创造更大的价值,最终也能够让员…

先进制造业不断发展,马思特以三大优势服务中国市场

近日&#xff0c;马思特液体解决方案&#xff08;以下称“马思特”&#xff09;公布中国区业绩。得益于公司团队的密切协作&#xff0c;马思特中国2020上半年即实现全年盈利目标的140%。 “在如此困难的时期一家公司能够保持盈利&#xff0c;有赖于所有员工的共同努力。”马思特…

马思特php,全面解析曝光图马思特t300和t300rs有何区别?哪个好?爆料真实使用心得...

这两款图马思特t300和t300rs区别还是有的哈&#xff0c;款式和配置是不一样的&#xff0c;图马思特T300RSTH8A手柄套餐更大气一些&#xff0c;我自己用的是图马思特T300RSTH8A手柄套餐&#xff0c;性价比蛮高的&#xff0c;款式也是我喜欢的&#xff0c;多时尚的&#xff0c;整…

如何评价马云和马斯克在世界人工智能大会的对话?

来源&#xff1a;刘锋的未来课堂 马云和马斯克在世界人工智能大会的对话&#xff0c;虽然风轻云淡&#xff0c;天马行空&#xff0c;但两个人其实是针锋相对的&#xff0c;马云的观点是认为人工智能还是人类的工具&#xff0c;为人类的未来提供服务&#xff0c;马斯克继续保持他…

C++面向对象编程(类和对象)

全部学完提供一个练习的项目&#xff0c;在博主的主页可以找到该免费资源 文章目录 一、封装示例1&#xff1a;访问权限struct 和 class 区别检测数据有效性&#xff1a;练习1&#xff1a;练习2&#xff1a;构造函数析构函数构造函数的调用和分类拷贝构造函数调用时机初始化列表…

马斯克要求推特工程师默写代码,开始着手整顿美国职场?

要说世间谁最熟悉代码&#xff0c;程序员敢说第二&#xff0c;应该没人敢称第一。但这群和代码打交道最多的人&#xff0c;也会被代码难住&#xff0c;比如被要求默写一段代码&#xff01; 最近&#xff0c;马斯克要求推特工程师默写代码登上热搜榜&#xff0c;成为网友们讨论…

互联网日报 | 3月22日 星期一 | 苹果iMac Pro全球下架;知乎更新上市招股书;字节跳动成立朝夕光年奇想基金...

今日看点 ✦ 知乎更新招股书&#xff1a;最高融资超10亿美元&#xff0c;腾讯阿里京东认购 ✦ 字节跳动成立朝夕光年奇想基金&#xff08;NIF&#xff09;&#xff0c;将投资游戏创业团队 ✦ 京东云联合京东物流、京东生鲜共同打造“京东冷链溯源平台” ✦ 工商银行资产托管规模…

关于苹果开发者协议更新的相关问题

最近进入开发者中心相信大家都会看到如下图所示的信息&#xff0c;同时最近很多道友在群里咨询有关开发者协议更新的问题&#xff0c;基本可以肯定的是密保问题答案给忘记了&#xff0c;忘记密保问题就真的不能更细协议了&#xff1f;当然不是&#xff0c;接下里就给大家介绍一…

ChatGLM2-6B、ChatGLM-6B 模型介绍及训练自己数据集实战

介绍 ChatGLM-6B是开源的文本生成式对话模型,基于General Language Model(GLM)框架,具有62亿参数,结合模型蒸馏技术,实测在2080ti显卡训练中上(INT4)显存占用6G左右, 优点:1.较低的部署门槛&#xff1a; FP16 半精度下&#xff0c;ChatGLM-6B 需要至少 13GB 的显存进行推理&a…

羊驼系列大模型和ChatGPT差多少?详细测评后,我沉默了

来源&#xff1a;机器之心 本文约5100字&#xff0c;建议阅读10分钟一番深入测评&#xff0c;结果令人深思。 总的来说&#xff0c;该测试得出的结论是&#xff1a;MPT 还没有准备好在现实世界中使用&#xff0c;而 Vicuna 对于许多任务来说是 ChatGPT (3.5) 的可行替代品。 前…