IM即时通讯-项目框架搭建(二)
项目的目录框架
基于这个框架,后续会一个个实现
加载配置文件
在项目中用到了redis、mongodb,这两个数据库应该要在程序启动时连接,在程序的运行中只是调用,而不是每次调到时都重新连接。
配置文件 application/conf/config.ini
[mysql]
username='root'
password='root'
host='127.0.0.1'
port=3306
database='im-demo'[redis]
host='127.0.0.1'
port='6379'
password=''
db=0[mongodb]
username='root'
password='root'
host='127.0.0.1'
port=27017
db='admin'
读取配置文件 application/conf/config.go
package confimport ("fmt""github.com/spf13/viper"
)var (MysqlConf MysqlIniRedisConf RedisIniMongoDbConf MongoDbIni
)type MysqlIni struct {Username stringPassword stringHost stringPort intDatabase string
}type RedisIni struct {Host stringPort stringPassword stringDb int
}type MongoDbIni struct {Username stringPassword stringHost stringPort intDb string
}// viper 读取ini配置文件
func init() {config := viper.New()config.AddConfigPath("./application/conf/")config.SetConfigName("config")config.SetConfigType("ini")if err := config.ReadInConfig(); err != nil {if _, ok := err.(viper.ConfigFileNotFoundError); ok {fmt.Println("找不到配置文件..")} else {fmt.Println("配置文件出错..")}fmt.Println(err.Error())return}MysqlConf = MysqlIni{Username: config.GetString("mysql.username"),Password: config.GetString("mysql.password"),Host: config.GetString("mysql.host"),Port: config.GetInt("mysql.port"),Database: config.GetString("mysql.database"),}RedisConf = RedisIni{Host: config.GetString("redis.host"),Port: config.GetString("redis.port"),Password: config.GetString("redis.password"),Db: config.GetInt("redis.db"),}MongoDbConf = MongoDbIni{Username: config.GetString("mongodb.username"),Password: config.GetString("mongodb.password"),Host: config.GetString("mongodb.host"),Port: config.GetInt("mongodb.port"),Db: config.GetString("mongodb.db"),}
}
项目初始化
package applicationimport ("context""fmt""im-demo/application/conf""github.com/go-redis/redis""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options"
)var (MysqlClient *gorm.DBRedisClient *redis.ClientMongoDBClient *mongo.ClientMongoDataBaseName = "im-demo"MongoMsgCollection = "message"MongoSessionListCollection = "session_list"MongoFriendRequestCollection = "friend_request"
)func init() {// MysqlClient = intiMysql()RedisClient = initRedis()MongoDBClient = initMongoDB()
}func intiMysql() *gorm.DB {fmt.Println("mysql is connecting...")uri := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", conf.MysqlConf.Username, conf.MysqlConf.Password, conf.MysqlConf.Host, conf.MysqlConf.Port, conf.MysqlConf.Database)db, err := gorm.Open("mysql", uri)if err != nil {panic(err)} else {fmt.Println("mysql connectiton success")}// 设置全局表名禁用复数db.SingularTable(true)return db
}func initRedis() *redis.Client {fmt.Println("redis is connecting...")client := redis.NewClient(&redis.Options{Addr: conf.RedisConf.Host + ":" + conf.RedisConf.Port, // "127.0.0.1:6379"Password: conf.RedisConf.Password, // ""DB: conf.RedisConf.Db, // 0})err := client.Ping().Err()if err != nil {panic(err)} else {fmt.Println("redis connectiton success")}return client
}func initMongoDB() *mongo.Client {fmt.Println("mongodb is connecting...")uri := fmt.Sprintf("mongodb://%s:%s@%s:%d/%s", conf.MongoDbConf.Username, conf.MongoDbConf.Password, conf.MongoDbConf.Host, conf.MongoDbConf.Port, conf.MongoDbConf.Db)clientOptions := options.Client().ApplyURI(uri)client, err := mongo.Connect(context.TODO(), clientOptions)if err != nil {panic(err)}// 检查连接err = client.Ping(context.TODO(), nil)if err != nil {panic(err)}println("mongodb connectiton success")return client
}
这里只是项目前期,关键的IM还在后续
IM即时通讯从0到1的实践,相关文章:
IM即时通讯-从0到1的实践(一)
IM即时通讯-项目框架搭建(二)<本文>
IM即时通讯-用户注册登录,及gin+JWT鉴权(三)
IM即时通讯-核心结构体设计(四)
IM即时通讯-消息id(五)
IM即时通讯-会话列表和会话信箱(六)
IM即时通讯-1.0版成果展示与后续扩展(七)
IM即时通讯-项目框架搭建(二)相关推荐
- Vue3.0 + Ts 项目框架搭建二:路由 Router
前言 上篇文章我们使用 vue-cli 创建了模板项目,可以看到安装的依赖只有 vue,所以要正常的驱动项目,安装必要的依赖是跑不了. 其中Router是控制整个系统的页面路由,是最重要的依赖之一.因 ...
- SpringSecurity(二)、权限项目框架搭建
Springboot + SpringSecurity权限项目框架搭建 目录 一.项目介绍 二.项目搭建(父子工程) 1.添加 pom 依赖 2.修改 yml 配置 3.编写JwtTokenUtil工 ...
- Android-IM从零开始开发一个即时通讯项目
Android-IM从零开始开发一个即时通讯项目 https://www.jianshu.com/p/dca480006691 关于聊天室项目 聊天室项目,也被称为即时通讯(IM). 其原理是服务器是 ...
- (三) Angular2项目框架搭建心得
前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...
- Netty实战 IM即时通讯系统(十二)构建客户端与服务端pipeline
Netty实战 IM即时通讯系统(十二)构建客户端与服务端pipeline 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端和服务端双向 ...
- 【高校宿舍管理系统】第一章 建立数据库以及项目框架搭建
第一章 建立数据库以及项目框架搭建 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第一章 建立数据库以及项目框架搭建 前言 一 ...
- spring cloud多模块项目框架搭建-Redis-Cluster集群搭建及系统集成
第九章 Redis-Cluster集群搭建及系统集成 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的demo而已,提供系统 ...
- spring cloud多模块项目框架搭建-集成SLF4J和log4j2日志组件
第七章 集成SLF4J和log4j2进行日志管理 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块项目框架,并不是一个spring cloud的demo而已,提供分布式系统的 ...
- SpringBoot后端项目框架搭建
SpringBoot后端项目框架搭建 本节内容服务于SpringBoot + Vue 搭建 JavaWeb 增删改查项目. 工具安装 电脑已安装\配置如下工具: IDEA.jdk.MySQL及其可视化 ...
- IM即时通讯项目讲解(一) 实现类似qq微信表情面板无缝切换
IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换 标签(空格分隔): 开源项目 ###该系列技术课程来源慕课IM实战 带后台的IM即时通讯App 全程MVP手把手打造 #####通过该课 ...
最新文章
- 智源沙龙 | 人工智能“3个30年”之后,下个30年将走向何方?
- 怎么样才能让自己自律起来_一个人如何才能高度自律(深度好文)
- XGboost 实战糖尿病预测
- 安装SCOM Reporting Server
- matlab 获取视频图像的信息
- JavaScript服务器端开发技术(对象属性的枚举与查询)
- HDU-1241-Oil Deposits
- Leetcode 27 Remove Element
- 虚幻引擎编程基础(二)
- 成人教育考试报名照片的尺寸是多少?大一寸照片怎么做?
- JQuery视频总结
- Go 并发 | 数据竞争及竞争条件
- linux安全之系统安全
- 「详解」imgaug 图像增强方法
- 2005路网 2008路网 2009路网 2010路网 2011路网 2012路网 2013路网 2014路网 2015路网2016路网 2017路网 2018路网 2019路网下载与分析
- Java基础学习生疏知识点总结(4)——面向对象、单一职责原则、this关键字、构造方法
- 【语音识别】语音识别技术入门
- nacos注册服务的时候报错server is DOWN now, please try again later!
- arping指令即其参数对应的功能
- 飞秋下载2010正式版 飞秋下载
热门文章
- 为什么苹果蓝牙耳机连上还是公放_史上最好用的蓝牙无线耳机?苹果AirPods神奇在哪里!...
- Ubuntu 18.04 网口创建网络共享
- SpringBoot中Redis报错:NOAUTH Authentication required.; nested exception is redis.clients.jedis.exceptio
- 使用Docker一键部署MongoDB
- cache的替换策略
- 内存虚拟化硬件基础——EPT
- 电脑wps可以语音录入吗_wps语音输入功能在哪
- Windows下如何清除文件资源管理器搜索框中的搜索记录?
- 屏蔽高通8953长按电源键的截屏按钮
- Android实战——简单网络视频播放器