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

发布于:2024-10-08 ⋅ 阅读:(8) ⋅ 点赞:(0)

营运版的即时通讯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应用的运行环境是一个明智的选择。