使用uniapp的WebSocket建立聊天框

在APP.vue文件

<script>
	export default {
		globalData:{
			connectUrl:"ws://*******************.com:8282",//url
		},
		onLaunch: function() {
			this.createConnect();
		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		},
		methods:{
			createConnect(){
				let _this = this;
				uni.connectSocket({
					url:_this.globalData.connectUrl,
					complete:res=>{
						console.log(res)
					}
				});
				uni.onSocketOpen(function (res) {
				  _this.sendMessage("keep connected");
				  if(uni.getStorageSync("jzToken")){
					  _this.sendMessage({"contacts":2});
				  }
				  
				  setInterval(()=>{
					  _this.sendMessage("keep connected");
				  },30000)
				});
				uni.onSocketMessage(function (res) {
					console.log(res)
				  let data = JSON.parse(res.data);
					console.log(data.num);
				  if (data.state == 2 && data.num>0){
						uni.setTabBarBadge({
						  index: 3,
						  text: data.num.toString()
						});
					}else if(data.state == 2 && data.num == 0){
						uni.hideTabBarRedDot({
							index:3
						})
					}
				});
				uni.onSocketError(function (res) {
				  console.log('WebSocket连接打开失败,请检查!');
				});
				uni.onSocketClose(function(res){
					console.log(res)
					// uni.connectSocket({url:_this.globalData.connectUrl,complete:res=>{console.log(res)}});
				})
				
			},
			sendMessage(data){
				if(data != "keep connected"){
					data.token = uni.getStorageSync("jzToken");
					data = JSON.stringify(data);
				}
				console.log(data)
				uni.sendSocketMessage({
					data
				})
			},
		}
	}
</script>

<style lang="scss">
	/*每个页面公共css */
	@import "uview-ui/index.scss";
	
</style>

2.聊天框所在的文件,如news.vue

<template>
	<view class="ChatBox" :style="{'padding-top':appInfo.statusBarHeight+'px'}">
		<!-- #ifdef APP-PLUS -->
		<view class="titleWrap" :style="{'padding-top':appInfo.statusBarHeight+'px'}">
			<view>
				聊天框
				<image src="../../static/index/release/back.png" @click="back"></image>
			</view>
		</view>
		<view style="width: 100%;height: 88upx;"></view>
		<!-- #endif -->
		<scroll-view :scroll-y="true" :scroll-top="scrollTop" :class="['ChatContent',isMenuItem?'active':'']" :style="{'padding-top':appInfo.statusBarHeight+'px'}">
			<view style="display: flex;flex-direction: column-reverse;">
				<view class="ChatItem" v-for="(item,index) in list" :key="index">
					<view class="ChatTime" v-if="item.timeShow">{
  {item.create_time}}</view>
					<view class="ChatList">
						<view class="ChatList_L" v-if="item.mainUser.id != userId">
							<view class="ChatImage">
								<image :src="getImage(item.mainUser.image)" mode="" style="border-radius: 50%;"></image>
							</view>
							<view class="contentBox" v-if="item.type==1">
								<view class="content">
									{
  {item.news}}
								</view
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值