广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何利用微信小程序和php实现即时通讯聊天功能
  • 955
分享到

如何利用微信小程序和php实现即时通讯聊天功能

2024-04-02 19:04:59 955人浏览 独家记忆
摘要

目录一、PHP7安装Swoole扩展1、自定义安装2、宝塔面板安装php swoole扩展二、配置Nginx反向代理三、微信小程序Socket合法域名配置四、效果演示和代码1、小程序

一、PHP7安装Swoole扩展

PHP swoole 扩展下载地址

GitHubhttps://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心跳时间,默认是60s
        proxy_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


 
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)
    //发送给websocket
    wx.sendSocketMessage({
      data: JSON.stringify(customerMsg),
      success:res=>{
        //重启心跳包
        this.webSocketXin(40000, true)
      }  
    })
 
    //追加到消息列表里
    msgList.push(customerMsg)
    inputVal = '';
    this.setData({
      msgList,
      inputVal
    });
  },
  
  toBackClick: function() {
    wx.navigateBack({})
  },
  
  chat(){
     //进行连接php的socket
     wx.connectSocket({
       //wss 协议相当于你要有一个ssl证书,https
       //ws  就相当于不实用证书  http
      url: 'ws://study.lishuo.net',
      success: function () {
        console.log('websocket连接成功~')
      },
      fail: function () {
        console.log('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

 总结

到此这篇关于如何利用微信小程序和php实现即时通讯聊天功能的文章就介绍到这了,更多相关微信小程序 php即时通讯聊天内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何利用微信小程序和php实现即时通讯聊天功能

本文链接: https://www.lsjlt.com/news/145520.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何利用微信小程序和php实现即时通讯聊天功能
    目录一、PHP7安装Swoole扩展1、自定义安装2、宝塔面板安装PHP swoole扩展二、配置nginx反向代理三、微信小程序socket合法域名配置四、效果演示和代码1、小程序...
    99+
    2022-11-13
  • 如何用PHP实现微信小程序的实时聊天功能?
    如何用PHP实现微信小程序的实时聊天功能?随着移动互联网的发展,微信小程序成为了很多开发者的首选平台。而实时聊天功能作为一种关键的社交功能,很多用户都希望在自己的小程序中实现。本文将介绍如何使用PHP来实现微信小程序的实时聊天功能,并提供具...
    99+
    2023-10-27
    PHP 微信小程序 实时聊天
  • 【微信开发】微信小程序实现实时聊天功能
    最近在做一个项目,需要运用到实时聊天功能,分享一下。      分为: 界面如何布局以及细节; 如何实现实时更新; 全部代码展示;         一、界面如何布局以及细节:         1.说到底,聊天界面就是循环一个数组,每一行...
    99+
    2023-09-02
    微信小程序 小程序
  • 微信小程序 | 基于小程序+Java+WebSocket实现实时聊天功能
    一、文章前言 此文主要实现在小程序内聊天对话功能,使用Java作为后端语言进行支持,界面友好,开发简单。 二、开发流程及工具准备 2.1、注册微信公众平台账号。 2.2、下载安装Inte...
    99+
    2023-09-06
    小程序 微信小程序 java
  • 如何用PHP实现微信小程序的天气预报功能?
    如何用PHP实现微信小程序的天气预报功能?随着微信小程序的流行,越来越多的开发者开始尝试在小程序中添加实用的功能,比如天气预报。在本文中,我们将学习如何使用PHP来实现微信小程序的天气预报功能,并提供代码示例。在开始之前,我们需要确保已经申...
    99+
    2023-10-27
    天气预报 PHP 微信小程序
  • 微信小程序如何实现实时聊天并支持图片预览
    这篇文章给大家分享的是有关微信小程序如何实现实时聊天并支持图片预览的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先看一下界面,界面很简单,就是首页刚进来获取了用户信息头像,昵称...
    99+
    2022-10-19
  • 如何通过PHP实现微信小程序的高级功能?
    如何通过PHP实现微信小程序的高级功能?随着微信小程序的快速发展,越来越多的开发者开始关注如何通过PHP实现微信小程序的高级功能。PHP是一种非常强大的后端编程语言,能够与微信小程序进行交互,实现一些复杂的功能和业务逻辑。在本文中,我将分享...
    99+
    2023-10-27
    PHP 微信小程序 高级功能
  • 微信小程序服务通知功能如何实现
    这篇文章主要介绍“微信小程序服务通知功能如何实现”,在日常操作中,相信很多人在微信小程序服务通知功能如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序服务通知功能如何实现”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • 如何利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
    这篇文章主要介绍如何利用HTML5+css3+jquery+weui实现仿微信聊天界面功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最新因项目需要,就利用HTML5+css3+jquery+weui做了一个仿微信...
    99+
    2023-06-09
  • 如何使用MySQL和JavaScript实现一个简单的即时聊天功能
    如何使用MySQL和JavaScript实现一个简单的即时聊天功能随着社交媒体的普及,即时聊天已经成为了人们日常生活中必不可少的一部分。在这篇文章中,我们将介绍如何使用MySQL和JavaScript来实现一个简单的即时聊天功能。首先,我们...
    99+
    2023-10-22
    MySQL JavaScript 即时聊天
  • 如何用PHP实现微信小程序的游戏功能?
    如何用PHP实现微信小程序的游戏功能?随着微信小程序的兴起,越来越多的开发者开始关注如何在小程序中实现游戏功能。PHP作为一种流行的后端语言,可以很好地与小程序进行搭配,实现游戏功能。下面将介绍如何使用PHP来实现微信小程序的游戏功能,并提...
    99+
    2023-10-28
    微信小程序 游戏功能 PHP实现微信小程序
  • 微信小程序如何使用PHP实现支付功能
    小编给大家分享一下微信小程序如何使用PHP实现支付功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例为大家分享了微信小程序支付PHP具体代码,供大家参考,具体内容如下服务器端获取 ...
    99+
    2022-10-19
  • 微信小程序如何实现简单倒计时功能
    本篇内容介绍了“微信小程序如何实现简单倒计时功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!任务描述:计时器任务要求:案例描述:设计一个实...
    99+
    2023-06-30
  • 如何使用PHP在微信小程序中实现AI功能?
    如何使用PHP在微信小程序中实现AI功能?随着人工智能的发展,AI(Artificial Intelligence,人工智能)技术被广泛应用于各个领域。微信小程序作为一种强大的移动应用开发平台,也可以集成AI功能,为用户提供更智能的服务。本...
    99+
    2023-10-28
    AI PHP 微信小程序 实现
  • 如何使用PHP实现微信小程序的导航功能?
    如何使用PHP实现微信小程序的导航功能?随着微信小程序的火热,在开发微信小程序时,导航功能是一个很常见且必要的功能。本文将介绍如何使用PHP实现微信小程序的导航功能,并提供具体的代码示例。获取用户当前位置在微信小程序中使用地图导航功能,首先...
    99+
    2023-10-27
    PHP 微信小程序 导航功能
  • 如何使用PHP实现微信小程序的绘图功能?
    如何使用PHP实现微信小程序的绘图功能?随着小程序的普及,越来越多的开发者开始关注如何在微信小程序中实现绘图功能。PHP作为一种常用的服务器端脚本语言,可以与微信小程序结合,实现丰富的绘图功能。本文将具体介绍如何使用PHP实现微信小程序的绘...
    99+
    2023-10-27
    绘图 PHP 微信小程序
  • 如何使用PHP实现微信小程序的记账功能?
    如何使用PHP实现微信小程序的记账功能?微信小程序在近年来得到了广泛的应用,其中记账功能是许多用户常用的功能之一。本文将介绍如何使用PHP实现微信小程序的记账功能,并提供具体的代码示例。一、准备工作要使用PHP实现微信小程序的记账功能,我们...
    99+
    2023-10-27
    PHP 微信小程序 记账功能
  • 如何使用PHP实现微信小程序的投影功能?
    如何使用PHP实现微信小程序的投影功能?随着微信小程序的快速发展,越来越多的开发者开始关注其功能的拓展与扩展。其中,投影功能是一个受到用户欢迎的特性。通过投影功能,用户可以将小程序上的内容投射到更大的屏幕上,提供更好的视觉体验。本文将介绍如...
    99+
    2023-10-27
    PHP 微信小程序 投影功能
  • 如何使用PHP实现微信小程序的闹钟功能?
    如何使用PHP实现微信小程序的闹钟功能?随着微信小程序的普及,更多的开发者开始关注如何在微信小程序中实现各种实用的功能。其中,闹钟功能是一项非常实用的功能之一。本文将介绍如何使用PHP编写后端接口,并结合微信小程序的前端代码,实现一个简单的...
    99+
    2023-10-27
    微信 PHP 闹钟
  • 微信小程序中如何实现发送短信倒计时功能
    这篇文章主要介绍微信小程序中如何实现发送短信倒计时功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!点击后代码<form bindsubmit="formS...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作