使用uniapp实现websocket聊天功能

简介: 使用uniapp实现websocket聊天功能

在APP.vue里面配置  URL里面填写的是自己的地址

<script>
  export default {
    onLaunch: function() {
      console.log('App Launch')
    },
    onShow: function() {
      console.log('App Show')
      // 获取用户id(发送者)
      let id = uni.getStorageSync('id')
      // 创建ws连接
      uni.connectSocket({
        url: ''
      });
      // 监听ws打开状态
      uni.onSocketOpen((res) => {
        // console.log(123);
        console.log('连接成功');
        // 绑定发送id
        // ws链接状态
        setInterval(() => {
          console.log(111)
          uni.sendSocketMessage({
            data: JSON.stringify({
              type: `ping`,
            })
          });
        }, 1500);
        console.log('WebSocket连接已打开!');
      });
      
      let ta = this
      // ws监听接受消息
      uni.onSocketMessage((res) => {
        console.log(res.data)
        console.log(JSON.parse(res.data), 'aaaa');
        if (JSON.parse(res.data).type == 'chat') {
          that.data.push({
            ...JSON.parse(res.data)
          })
        }
      });
      uni.onSocketError((res) => {
        console.log('WebSocket连接打开失败,请检查!', res);
        uni.connectSocket({
          url: ''
        });
      });
      uni.onSocketClose((res) => {
        console.log('WebSocket 已关闭!');
        uni.connectSocket({
          url: ''
        });
      });
    },
    onHide: function() {
      console.log('App Hide')
    }
  }
</script>
<style lang="scss">
  /*每个页面公共css */
  @import "@/uni_modules/uview-ui/index.scss";
</style>

聊天列表页面的实现  可以根据自己的样式做调整

<template>
  <view>
    <div style="height: 30rpx"></div>
    <!-- 消息列表 -->
    <div class="big" v-for="(item,index) in data" :key="index" @click="goTalk(item.receive,item.img)">
      <div style="width: 10px"></div>
      <image :src="'http://wcy.jingyi.icu/'+item.img" mode="" class="Ai"></image>
      <div style="width: 10px"></div>
      <div class="contentOne">
        <div style="height: 10px"></div>
        <div class="Tow">
          <p class="text">{{item.name}}</p>
          <p>{{item.addtime}}</p>
        </div>
        <div style="height: 20rpx"></div>
        <div class="titleCon">{{item.content}}</div>
        <div style="height: 10rpx"></div>
      </div>
    </div>
    <u-tabbar :value="value" :placeholder="false" @change="change1" :fixed="true" :safeAreaInsetBottom="false">
      <u-tabbar-item text="首页" icon="home" @click="change"></u-tabbar-item>
      <u-tabbar-item text="消息" icon="chat" :badge="num" @click="change"></u-tabbar-item>
    </u-tabbar>
  </view>
</template>

聊天记录页面布局的实现

<template>
  <view class="chat">
    <scroll-view :style="{height: `${windowHeight-inputHeight}rpx`}" id="scrollview" scroll-y="true"
      :scroll-top="scrollTop" class="scroll-view">
      <!-- 聊天主体 -->
      <view id="msglistview" class="chat-body">
        <!-- 聊天记录 -->
        <view v-for="(item,index) in data" :key="index">
          <!-- <view class="nows_time">
            <view class="am_pm_time">{{item.addtime}}</view>
          </view> -->
          <!-- 自己的内容 -->
          <view class="item self" v-if="item.sender == id">
            <!-- 文字内容 -->
            <view class="content right">
              {{item.content}}
            </view>
            <view class="avatar">
              <image :src="Himg" mode=""></image>
            </view>
          </view>
          <!-- 左侧内容 -->
          <view class="item Ai" v-if="item.sender != id">
            <view class="avatar">
              <image :src="Timg" mode=""></image>
            </view>
            <!-- 文字内容 -->
            <view class="content left">
              {{item.content}}
            </view>
          </view>
        </view>
      </view>
    </scroll-view>
    <!-- 防止聊天消息被发送框遮挡 -->
    <view class="chat-bottom" :style="{height: `${inputHeight}rpx`}">
      <view class="send-msg" :style="{bottom:`${keyboardHeight}rpx`}">
        <view class="uni-textarea">
          <textarea v-model="chatMsg" maxlength="300" confirm-type="send" @confirm="handleSend"
            :show-confirm-bar="false" @linechange="sendHeight" auto-height></textarea>
        </view>
        <button @tap="sends" class="send-btn">发送</button>
      </view>
    </view>
  </view>
</template>

 

相关文章
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
68 1
|
2月前
|
存储 JavaScript 前端开发
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
138 0
|
6月前
|
移动开发 JavaScript 前端开发
【Uniapp 专栏】Uniapp 与 Flutter 的功能特点对比
【5月更文挑战第15天】Uniapp 和 Flutter 是跨平台开发的热门框架。Uniapp 以其强大的跨平台兼容性和基于 Vue.js 的易学性著称,适合快速开发适用于 iOS、Android 和 H5 的应用。其丰富的组件生态简化了功能集成。然而,在复杂场景下,性能可能不及原生。Flutter 则以其全新渲染引擎实现流畅界面和高度自定义,性能接近原生,但学习成本较高,需处理特定平台适配。适用于高要求的项目。两者各有优势,选择应考虑项目需求、技术储备和开发周期。
790 1
【Uniapp 专栏】Uniapp 与 Flutter 的功能特点对比
|
6月前
|
开发框架 前端开发 开发者
【Uniapp 专栏】Uniapp 的状态管理功能深度解析
【5月更文挑战第13天】Uniapp 的状态管理对于构建复杂跨平台应用至关重要,它包括全局变量、Vuex 风格管理。核心概念有 State、Actions 和 Mutations。通过状态定义、动作设计和突变管理,提高开发效率和代码可维护性。实际案例和与其他框架比较显示了 Uniapp 的优势。理解并有效利用状态管理,能提升应用质量和开发效率。
313 1
【Uniapp 专栏】Uniapp 的状态管理功能深度解析
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
102 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
1月前
|
JavaScript 数据安全/隐私保护
uniapp功能权限判断$auth.auth $auth.role显示判断生成源码
uniapp功能权限判断$auth.auth $auth.role显示判断生成源码
22 0
|
3月前
|
开发框架 移动开发 前端开发
基于SqlSugar的开发框架循序渐进介绍(19)-- 基于UniApp+Vue的移动前端的功能介绍
基于SqlSugar的开发框架循序渐进介绍(19)-- 基于UniApp+Vue的移动前端的功能介绍
|
3月前
|
Linux C++ Docker
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
【Azure 应用服务】App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)
|
4月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
181 6
|
3月前
|
JavaScript 前端开发 网络协议
WebSocket在Java Spring Boot+Vue框架中实现消息推送功能
在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详细介绍如何在Java Spring Boot后端和Vue前端框架中利用WebSocket实现消息提醒功能。
147 0