828华为云征文|华为云Flexus云服务器X实例部署 即时通讯IM聊天交友软件——高性能服务器实现120W并发连接

news2024/12/24 9:03:18

营运版的即时通讯IM聊天交友系统:特点可发红包,可添加多条链接到用户网站和应用,安卓+苹果APP+PC端+H5四合一

后端开发语言:PHP,
前端开发语言:uniapp混合开发。
集安卓+苹果APP+PC端+H5四合一APP源码,但本源码服务不提供ios签名、软著申请、上架服务等。
socket推送:GateWayWorker(支持分布式部署,高并发,抗压能力强,未采用第三方付费推送服务)
数据库:mysql
开发工具:hbuiderX,phpstorm
服务器操作系统: Linux Centos 7.x(不支持unbutun)
软件环境: php 5.6 +Apache2.4(或nginx)+MySQL5.6 (推荐使用宝塔)
第三方插件:FFmpeg
无需用到任何第三方付费api

搭配华为云FlexusX使用,性能高达:
同时在线人数受限于服务器内存,一般24G内存服务器可以支持大概120W并发连接。
用户活跃度受限于服务器cpu处理能力,一台24核服务器可以达到45W每秒的吞吐量

即时通讯IM聊天交友软件功能介绍:

一、有群聊、私聊、朋友圈、可以发送文字、语音、视频、图片、表情、红包,转账等。消息可以撤回
二、群组可以设置管理员、可以禁言、踢人,可设置是否可查看用户信息,可@用户、可发群公告等
三、支持扫码入群,可设置好友备注、群名片、消息置顶、消息免打扰、可以邀请好友直接进群等
四、拥有代理功能,支持关键词屏蔽,vip功能,签到功能,支持消息离线推送(ios无需上架,但是签名需支持push,通过APN推送,Android需要上应用商店,否则无法实现离线推送,下单一定要了解好离线消息相关流程)
五、APP端历史聊天记录、图片以及前端程序缓存在本地,页面秒开,支持云端同步聊天记录,断网状态页面之间也可以流畅切换

1、访问华为云官网,注册一个华为云账号

在这里插入图片描述

2、选择华为云Flexus云服务器X实例

https://www.huaweicloud.com/product/flexus-x.html
在这里插入图片描述

3、选择配置:

计费模式:根据需求选择包年/包月或按需计费模式。
区域与可用区:选择离您或您的用户群体较近的区域和可用区,以降低延迟并提高访问速度。
实例规格:根据业务负载和应用场景,选择合适的实例规格。华为云提供了多个固定规格套餐供选择,同时支持自定义规格,以满足不同需求。
系统镜像:从公共镜像中选择所需的操作系统镜像,或上传自定义镜像进行安装。
存储配置:根据需求选择合适的存储类型和大小,如SSD或SAS存储等。
网络与安全组:配置私有IP地址、公网IP地址(如需)以及安全组规则,确保云服务器的网络安全。

在这里插入图片描述

4、确认配置与购买:

在确认无误后,点击“立即购买”或“下一步”按钮,进入订单确认页面。
在订单确认页面中,仔细核对所选配置和价格等信息,确保无误后点击“提交订单”按钮。
根据提示完成支付流程,支付成功后即可等待云服务器的创建和交付。

5、远程连接SSH:

使用CloudShell、VNC、Xshell等工具远程连接到云服务器,进行后续的配置和操作。
建议通过公私钥对的方式连接,以提高安全性。

在这里插入图片描述

6、IM即时通讯系统环境配置要求

服务器操作系统: Linux Centos 7.x(不支持unbutun)

软件环境: php 5.6 +Apache2.4(或nginx)+MySQL5.6 (推荐使用宝塔)

开始安装环境

在这里插入图片描述
在这里插入图片描述

7、安装第三方插件:FFmpeg

ffmpeg安装(处理上传视频压缩剪辑出第一帧作为封面)
会调用系统system 执行命令行进行处理视频 部分源码扫描软件会认为是后门 可放心使用

./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-ffplay
sudo make -j 4
sudo make install

编译成功,那么将会在安装路径/user/local/ffmpeg下出现如下子目录
在这里插入图片描述

修改mongodb 端口为2702(端口任意)
开放2702 9393 1239端口

php7.3安装扩展fileinfo redis Swoole4 mongodb 删除全部禁用函数

app/im/common/controller/ActionBegin1.php 修改GatwayWork服务地址
config/database.php 修改数据库信息
socket/app/im/common/controller/Main.php 修改数据库信息
socket/app/im/common/controller/Config.php 修改IP

8、导入sql 文件

安装 MongoDB
在这里插入图片描述

需要 navicat 创建数据库 im 并导入合集
或者
把MongoDB文件夹上传到 /www/wwwroot
解压 设置权限777
进入目录/www/wwwroot/mongodb/im点宝塔上的终端
输入
mongorestore -d im /www/wwwroot/mongodb/im
然后软件商店mongodb端口改2702 保存 重启

上传后端到服务器

源码上传到/www/wwwroot/这里解压
网站目录:/www/wwwroot/im
运行目录/public
TP伪静态,防跨域关掉

location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}


location /h5{
     if (!-e $request_filename) {
     rewrite ^/(.*) /h5/index.html last;
     break;
     }
    }

安装yasm
根目录/opt/yasm-1.3.0
解压 设置权限777
点宝塔上的终端
输入

./configure make && make install
./configure && make && make install

前端H5 app 使用hbuiderx 进行打包
打包后的h5 可以上传到public/h5 文件夹里
在这里插入图片描述

打包后的app 可以上传到public/app 文件夹里 替换1.apk

pc 端 编译成H5 再打包exe
打包后的pc的h5和exe 可以上传到public/pc 文件夹里

在这里插入图片描述
性能参考:

同时在线人数受限于服务器内存,一般24G内存服务器可以支持大概120W并发连接。

用户活跃度受限于服务器cpu处理能力,一台24核服务器可以达到45W每秒的吞吐量
在这里插入图片描述

import store from './store/';

import _get from './_get';

import _action from './_action';



export default {

	/** 验证token */

	checkToken(res) {

		if(res.err){

			_action.checkFail();

		} else {

			/** 设置为登陆状态 */

			store.commit('set',{ k:'socket_state',v:1 });

			/** 获取基础数据 */

			_get.base();

		}

	},

	/** 下线 */

	offline(res){

		uni.showModal({

			content: '你的账号在另一客户端登陆,如果不是你本人操作,请修改你的密码',

			success(){

				_action.checkFail();

			},

		});

	},

	/** 获得会话列表 */

	getChatList(){

		_get.getChatList();

	},

	/** 获得好友列表 */

	getFriendList(){

		_get.getFriendList({ up: 1});

	},

	/** 新好友提醒 */

	newFriend(data){

		_action.playVoice('/static/voice/friend.mp3');

		let num = store.state.new_friend_tips_num + (data.num * 1);

		store.commit('set',{ k:'new_friend_tips_num',v:num });

		_action.setStatusTips();

	},

	timeData(data){

		//console.log(data);

	},

	/** 接收新消息 */

	chatData(data){

		let chat_data = store.state.page_data.chat_data,

		msg_reader_num = 1;

		if(chat_data[data.list_id]){

			// 如果在与对方的对话界面,更新这个对话的阅读(即反馈接收状态)

			if(store.state.page_data.message_query_list_id == data.list_id && store.state.user_info.id != data.data.msg.user_info.uid){

				_action.updataNoReader(data.list_id);

				msg_reader_num = 0;

			}

			store.state.page_data.chat_data[data.list_id].list.push(data.data);

		}

		//console.log(data);

 

		/** 更新对话列表数据 */		

		for(let i = 0,j = store.state.page_data.chat_list.length;i < j;i ++){

			if(store.state.page_data.chat_list[i].list_id == data.list_id){

				let last_msg;

				switch(data.data.msg.type * 1){

					case 0:

						last_msg = data.data.msg.content.text;

						break;

					case 1:

						/** 语音 */

						last_msg = '[语音]';

						break;

					case 2:

						/** 图片 */

						last_msg = '[图片]';

						break;

					case 3:

						/** 视频 */

						last_msg = '[视频]';

						break;

					case 4:

						/** 文件 */

						last_msg = '[文件]';

						break;

					case 5:

						/** 红包 */

						last_msg = '[红包]';

						break;

					default:

						/** 未知消息类型 */

						last_msg = '[未知]';

						break;

				}

				store.state.page_data.chat_list[i].last_msg = last_msg;

				store.state.page_data.chat_list[i].no_reader_num += msg_reader_num;

				store.state.page_data.chat_list[i].time = data.data.msg.time;

				let action_list_data = store.state.page_data.chat_list[i];

				store.state.page_data.chat_list.splice(i,1);

				store.state.page_data.chat_list.unshift(action_list_data);

				break;

			}

		}

 

		/** 如果不是自己的消息,震动提示 */

		if(store.state.user_info.id != data.data.msg.user_info.uid){

			uni.vibrateLong();

			_action.playVoice('/static/voice/chat.mp3');

		}

	},

	/** 接收好友朋友圈动态提示 */

	circleTips(data){

		_action.playVoice('/static/voice/circle.mp3');

		store.commit('set',{ k:'no_reader_circle',v:1 });

		_action.setStatusTips();

	},

	/** 接收朋友圈好友回复/赞通知 */

	cricleChatTips(data){

		_action.playVoice('/static/voice/circle.mp3');

		let num = store.state.no_reader_circle_chat_num;

		num ++;

		store.commit('set',{ k:'no_reader_circle_chat_num',v:num });

		_action.setStatusTips();

	},

	/** 撤回消息 */

	deleteChat(data){

		let chat_data = store.state.page_data.chat_data;

		if(chat_data[data.list_id] && chat_data[data.list_id].list.length){

			for(let i = 0,j = chat_data[data.list_id].list.length;i < j;i++ ){

				if(chat_data[data.list_id].list[i].msg.id == data.msg_id){

					store.state.page_data.chat_data[data.list_id].list.splice(i,1);

					break;

				}

			}

		}

	},

}

ios无需上架,但是签名需支持push,通过APN推送;Android需要上应用商店,否则无法实现离线推送,下单一定要了解好离线消息相关流程。

除以上配置,未用到任何第三方付费api,无需支付高昂的运营成本!

在这里插入图片描述

华为云Flexus X卓越的性能

柔性算力:华为云Flexus云服务器X实例基于用户业务负载动态和内存峰值画像,动态推荐规格,减少算力浪费,提升资源利用率。这种柔性算力的特性使得IM应用能够在高并发、大数据量的情况下依然保持流畅的运行状态。

大模型加持:华为云Flexus云服务器X实例配备了首创的大模型加持和智能全域调度技术,通过X-Turbo加速,常见应用性能最高可达业界同规格6倍。这意味着IM应用可以更快地处理消息、提供更快的响应速度,从而提升用户体验。

综上所述,华为云Flexus X云服务器X实例在安装搭建即时通讯(IM)聊天交友应用方面带来了诸多好处。这些好处不仅提升了应用的性能和安全性,还降低了使用成本并提供了高度的灵活性。因此,选择华为云Flexus云服务器X实例作为IM应用的运行环境是一个明智的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI学习记录 - L2正则化详细解释(权重衰减)

大白话&#xff1a; 通过让反向传播的损失值变得比原来更大&#xff0c;并且加入的损失值和权重的大小有关&#xff0c;当出现权重的平方变大的时候&#xff0c;也就是权重往更加负或者更加正的方向走的时候&#xff0c;损失就越大&#xff0c;从而控制极大正或者极大负的情况…

在宝塔面板中部署 Express + MongoDB + Uniapp h5 项目(超详细!!!)

文章目录 一、打包 uniapp h5 项目(1) 打开 manifest.json 文件&#xff0c;修改相关配置(2) 开始项目打包 二、修改 express 相关配置(1) 添加打包后的前端资源文件(2) 修改 app.js 文件(3) 修改项目启动命令 三、使用宝塔面板部署项目(1) 宝塔面板安装(2) 项目环境搭建 四、添…

之前各种炸裂的Flux更新了Flux1.1 pro,效果会不会依然“炸裂”呢?

&#x1f420;更新内容 Black Forest Labs&#xff0c;也就是黑森林工作室在国庆期间更新了新的模型&#xff0c;Flux1.1 Pro&#xff0c;官方公告大家也可以参考&#xff1a; announcements. - Black Forest Labs 那么这次更新主要讲了什么呢&#xff1f; FLUX1.1 [pro]&am…

系统架构设计师-下午案例题(2018年下半年)

1.某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设水平。该软件公司组织项目组完成了需求调研,现已进入到系统架构设计阶段。考虑到系统需求对架构设计决策的影响,项目组先列出了可能影响系统架…

企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)

EHR人力资源管理系统是现代企业提升人力资源管理效率的重要工具。该系统集成了多个功能模块&#xff0c;旨在实现人力资源管理的全面数字化和自动化。以下是对EHR系统主要功能的剖析&#xff0c;包括组织架构、人事管理、考勤管理、薪资管理、绩效管理、档案管理、招聘管理、培…

如何写出更系统的验证检查器

前言 芯片验证是为了发现芯片中的错误而执行的过程&#xff0c;它是一个破坏性的过程。有效激励灌入待测模块后&#xff0c;需要判断出不符合功能描述的行为。检查器(Checker)就是用于查看待测模块是否按照功能描述文档做出期望的行为&#xff0c;识别出所有的设计缺陷。 不同…

【PostgreSQL】PG数据库表“膨胀”粗浅学习

文章目录 1 为什么需要关注表膨胀&#xff1f;2 如何确定是否发生了表膨胀&#xff1f;2.1 通过查询表的死亡元组占比情况来判断膨胀率2.1.1 指定数据库和表名2.1.2 查询数据库里面所有表的膨胀情况 3 膨胀的原理3.1 什么是膨胀&#xff1f;膨胀率&#xff1f;3.2 哪些数据库元…

服贸会上的科技闪耀之星:璞华易研PLM系统引领产品研发潮流

2024年中国国际服务贸易交易会&#xff08;以下简称为“服贸会”&#xff09;于9月在北京盛大开幕&#xff0c;再次汇聚全球目光&#xff0c;共襄智慧服务的盛宴。本届服贸会秉承“全球服务、互惠共享”的核心理念&#xff0c;聚焦“共享智慧服务&#xff0c;共促开放发展”&am…

计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【路径规划】A*(A星)搜索路径规划教程

摘要 A算法是一种用于图形搜索的启发式搜索算法&#xff0c;广泛应用于路径规划、游戏AI和机器人导航等领域。本教程将深入介绍A算法的理论基础&#xff0c;展示其在路径规划中的应用&#xff0c;并通过Matlab代码实现A*算法的实际运行。同时&#xff0c;我们将结合实验结果进…

qsort函数及其使用的方法分解讲解

qsort函数 默认排序升序 void qsort(void* base,//指向待排序数组的第一个元素的地址 size_t num,//base指向数组中元素的个数 size_t size,//base指向的数组中一个元素的大小&#xff0c;单位是字节 int (*compar)(const void*,const void*…

YOLO11改进|卷积篇|引入线性可变形卷积LDConv

目录 一、【LDConv】卷积1.1【LDConv】卷积介绍1.2【LDConv】核心代码 二、添加【LDConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【LDConv】卷积 1.1【LDConv】卷积介绍 下图是【LDCNV】的结构图&#xff0c;让我们简单分析…

Mysql高级篇(下)——主从复制

主从复制 一、概述二、作用&#x1f388; 场景示例&#x1f388; 综合示例 三、原理&#x1f388; 主从复制基本原则&#x1f388; 主从复制存在的问题 四、一主一从架构搭建&#x1f331;准备工作&#x1f31e;步骤1. 配置主库&#xff08;Master&#xff09;2. 配置从库&…

如何搭建基于大模型的智能知识库

自从2022年底ChatGPT横空出世引爆了大模型技术浪潮&#xff0c;时至今日已经一年有余&#xff0c;如何从技术侧向商业侧落地转化是一直以来业内普遍关注的问题。 从目前企业端观察到的情况来看&#xff0c;基于大模型的知识库是一个比较有潜力和价值的应用场景&#xff0c;能够…

落伍警告:不了解AI Agent,你可能会被编程界淘汰

AI Agent火爆到什么程度&#xff1f; OpenAI创始人奥特曼预测&#xff0c;未来各行各业&#xff0c;每一个人都可以拥有一个AI Agent&#xff1b;比尔盖茨在2023年层预言&#xff1a;AI Agent将彻底改变人机交互方式&#xff0c;并颠覆整个软件行业&#xff1b;吴恩达教授在AI…

UE5 武器IK瞄准系统

创建空项目 创建基础蓝图类My_GameMode,My_HUD,My_PlayChar,My_PlayController 项目设置地图模式 近裁平面 0.1 My_PlayChar蓝图中添加摄像机,角色骨骼网格体,武器骨骼网格体 编辑角色骨骼,预览控制器使用特定动画,动画选择ANM_ark-47-Idle hand_r 添加插槽WeaponMes…

Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(下篇)

在 人物角色保持一致性&#xff08;上篇&#xff09;中&#xff0c;我们已经得到了自己创造的角色的各个角度头像图片&#xff1a; 从中选择一个符合自己需求的角度&#xff0c;截图保存&#xff0c;例如下图&#xff1a; 更换人物表情 进入到「图生图」页面&#xff0c;把上一…

短视频时代,网站建设存在的意义还有多大?

在短视频时代&#xff0c;网站建设的存在意义依然具有多方面的价值和作用。尽管短视频作为一种新兴的传播方式迅速发展并受到广泛欢迎&#xff0c;但网站作为互联网的基础设施之一&#xff0c;仍然在许多领域发挥着不可替代的作用。以下是具体分析&#xff1a; 信息深度与完整性…

医院管理新思维:Spring Boot技术应用

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息&#xff0c;可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加&#xff0c;修改&#xff0c;…

开源项目带来的思考

分享一位在Hacker News上的一个帖子&#xff0c;该开源作者在Github上年收入达到10万美元&#xff0c;你不得不承认&#xff0c;个人开源项目的影响力还是很大的。 这条帖子讲述了一位Laravel的开发者&#xff0c;是如何在Github上做到年收入10万美元。该帖子一发布&#xff0c…