go高性能并发服务器,【Zinx第四章-全局配置】Golang轻量级并发服务器框架

2023-11-08

四、Zinx的全局配置

​ 随着架构逐步的变大,参数就会越来越多,为了省去我们后续大频率修改参数的麻烦,接下来Zinx需要做一个加载配置的模块,和一个全局获取Zinx参数的对象。

4.1 Zinx-V0.4增添全局配置代码实现

​ 我们先做一个简单的加载配置模块,要加载的配置文件的文本格式,就选择比较通用的json格式,配置信息暂时如下:

zinx.json

{

"Name":"demo server",

"Host":"127.0.0.1",

"TcpPort":7777,

"MaxConn":3

}

​ 现在我们需要建立一个全局配置信息的对象

A) 创建全局参数文件

创建zinx/utils文件夹,在下面创建globalobj.go文件,暂时编写如下。

zinx/utils/globalobj.go

package utils

import (

"encoding/json"

"io/ioutil"

"zinx/ziface"

)

/*

存储一切有关Zinx框架的全局参数,供其他模块使用

一些参数也可以通过 用户根据 zinx.json来配置

*/

type GlobalObj struct {

TcpServer ziface.IServer //当前Zinx的全局Server对象

Host string //当前服务器主机IP

TcpPort int //当前服务器主机监听端口号

Name string //当前服务器名称

Version string //当前Zinx版本号

MaxPacketSize uint32 //都需数据包的最大值

MaxConn int //当前服务器主机允许的最大链接个数

}

/*

定义一个全局的对象

*/

var GlobalObject *GlobalObj

​ 我们在全局定义了一个GlobalObject对象,目的就是让其他模块都能访问到里面的参数。

B) 提供init初始化方法

然后我们提供一个init()方法,目的是初始化GlobalObject对象,和加载服务端应用配置文件conf/zinx.json

zinx/utils/globalobj.go

//读取用户的配置文件

func (g *GlobalObj) Reload() {

data, err := ioutil.ReadFile("conf/zinx.json")

if err != nil {

panic(err)

}

//将json数据解析到struct中

//fmt.Printf("json :%s\n", data)

err = json.Unmarshal(data, &GlobalObject)

if err != nil {

panic(err)

}

}

/*

提供init方法,默认加载

*/

func init() {

//初始化GlobalObject变量,设置一些默认值

GlobalObject = &GlobalObj{

Name: "ZinxServerApp",

Version: "V0.4",

TcpPort: 7777,

Host: "0.0.0.0",

MaxConn: 12000,

MaxPacketSize:4096,

}

//从配置文件中加载一些用户配置的参数

GlobalObject.Reload()

}

C) 硬参数替换与Server初始化参数配置

zinx/znet/server.go

/*

创建一个服务器句柄

*/

func NewServer () ziface.IServer {

//先初始化全局配置文件

utils.GlobalObject.Reload()

s:= &Server {

Name :utils.GlobalObject.Name,//从全局参数获取

IPVersion:"tcp4",

IP:utils.GlobalObject.Host,//从全局参数获取

Port:utils.GlobalObject.TcpPort,//从全局参数获取

Router: nil,

}

return s

}

我们未来方便验证我们的参数已经成功被价值,在Server.Start()方法中加入几行调试信息

zinx/znet/server.go

//开启网络服务

func (s *Server) Start() {

fmt.Printf("[START] Server name: %s,listenner at IP: %s, Port %d is starting\n", s.Name, s.IP, s.Port)

fmt.Printf("[Zinx] Version: %s, MaxConn: %d, MaxPacketSize: %d\n",

utils.GlobalObject.Version,

utils.GlobalObject.MaxConn,

utils.GlobalObject.MaxPacketSize)

//...

//...

}

当然还有一些其他的之前写死的数值,均可以在配置文件配置,用全局参数替换,这里不一一列举。

当前zinx框架目录结构

├── README.md

├── utils

│ └── globalobj.go

├── ziface

│ ├── iconnnection.go

│ ├── irequest.go

│ ├── irouter.go

│ └── iserver.go

└── znet

├── connection.go

├── request.go

├── router.go

├── server.go

└── server_test.go

4.2 使用Zinx-V0.4完成应用程序

​ 我们这回再基于Zinx完成服务器就必须要提前先写好一个conf/zinx.json配置文件了。

├── Client.go

├── conf

│ └── zinx.json

└── Server.go

Server.go

package main

import (

"fmt"

"zinx/ziface"

"zinx/znet"

)

//ping test 自定义路由

type PingRouter struct {

znet.BaseRouter

}

//Test Handle

func (this *PingRouter) Handle(request ziface.IRequest) {

fmt.Println("Call PingRouter Handle")

_, err := request.GetConnection().GetTCPConnection().Write([]byte("ping...ping...ping\n"))

if err != nil {

fmt.Println("call back ping ping ping error")

}

}

func main() {

//创建一个server句柄

s := znet.NewServer()

//配置路由

s.AddRouter(&PingRouter{})

//开启服务

s.Serve()

}

$go run Server.go

结果:

$ go run Server.go

Add Router succ!

[START] Server name: demo server,listenner at IP: 127.0.0.1, Port 7777 is starting

[Zinx] Version: V0.4, MaxConn: 3, MaxPacketSize: 4096

start Zinx server demo server succ, now listenning...

现在配置已经加载成功了。

关于作者:

作者:Aceld(刘丹冰)

简书号:IT无崖子

原创声明:未经作者允许请勿转载,或者转载请注明出处!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go高性能并发服务器,【Zinx第四章-全局配置】Golang轻量级并发服务器框架 的相关文章

  • 基于TCN时间卷积网络(含因果膨胀卷积)的单特征输入股票预测项目实战(pytorch)(一维特征)【有数据集和代码,可运行】

    一 项目简介 股票预测是金融领域中的重要问题 通过对历史股票数据的分析和建模 我们可以尝试预测未来股票的价格趋势 为投资决策提供参考 本项目是基于PyTorch深度学习框架实现一个使用时间卷积网络 TCN Temporal Convolut
  • 把request对象中的请求参数封装到bean中/生成UUID

    package me gacl util import java util Enumeration import java util UUID import javax servlet http HttpServletRequest imp
  • 第七章 结构化设计

    第七章 结构化设计 1 软件结构图的形态特征有哪些指标 各有什么含义 1 深度 指结构图控制的层次 即模块的层数 2 宽度 指一层中最大的模块个数 3 扇出 指一个模块直接下属模块的个数 如模块M的扇出为3 4 扇入 指一个模块直接上属模块
  • 递归删除文件,但不删除根目录

    前提 最近在做开发的时候 要求删除文件夹中的子文件夹和文件 但不能删除根目录 现在先把代码给贴上来 再分析分析代码 代码已经测试过 完成可以实现要求 import java io public class testFile618 publi
  • GC 的三种基本实现方式

    参考资料 代码的未来 作者 日 松本行弘 由于并非本人原著 我只是个 搬运工 SO 未经本人允许请尽情转载 另外个人像说明一下这里所说的GC指泛指垃圾回收机制 而单指Java或其他某种特定语言中的GC 可能具体语言中实现的垃圾回收实现机制会
  • client-go 连接 kubernetes

    https github com kubernetes client go git 部署go 环境 wget https studygolang com dl golang go1 10 3 linux amd64 tar gz tar x
  • 从0移植uboot (一) _配置分析

    和绝大多数源码编译安装一样 uboot的编译流程也类似于 make config gt make gt make install 三步 只是由于uboot本身是针对多种平台的bootloader 软件的复杂性和通用型决定了编译uboot需要
  • sqlite-manage数据库可视化管理uniqpp

    一 sqlite manage介绍 sqlite manage 是 SQLite 数据库可视化管理插件 更方前期查看和操作SQLite数据库 给APP开发者提供方便 避免重复造轮子 内置增删改查工具类 可按需全局引用或单独引用 二 使用sq
  • 服务器查看数据库日志文件,服务器数据库查看日志文件

    服务器数据库查看日志文件 内容精选 换一换 对于不同业务场景 通过在调整数据库的参数配置 可以有效提升服务器性能 使用如下配置文件参数启动数据库 默认配置文件路径为 etc my cnf 其中MySQL软件安装及数据存放路径根据实际情况修改
  • C#post和GET方法的使用及案例展示

    我之前是接触过传参 http协议浏览器和服务器的三次握手以及常用的get post传参 都是有了解的 不过c 实现post get请求我第一想到的是 嗯 Ajax 当然这肯定不是 我们接下来用下面这页面为例 我们先来分析下 我们先看butt
  • SVM(核函数、高斯核函数RBF)

    转载自博客园 https www cnblogs com volcao p 9465214 html SVM 核函数 高斯核函数RBF 一 核函数 Kernel Function 1 格式 K x y 表示样本 x 和 y 添加多项式特征得
  • 《thinkphp》一、通用化api和异常解决方案

    一 通用化API接口数据封装 1 将下面代码放到common php公共文件中 方便调用 通用化API接口数据输出 param int status 业务状态码 param string message 信息提示 param data 数据
  • 闲鱼项目如何操作?日收入1000+详细讲解!

    想通过互联网赚钱 必须认识到两点 哪里有人哪里就有钱赚 信息资源差可以产生很大的价值 其实 有很多赚钱项目都是利用信息差进行一个放大化操作 闲鱼卖货就是其中一种 闲鱼就是利用信息差赚钱的项目 很多推广者利用用户贪小便宜的心理赚的盆满钵满 闲
  • 连载---《自动调节系统解析与PID整定》之一

    原创连载 自动调节系统解析与PID整定 之一 360doc com
  • mybatis-plus-boot-starter2.3.12.RELEASE版本搭配mybatis2.3.3和mysql-connector-java5.1.32

    mybatis plus版本与mysql版本 spring boot starter依赖版本
  • SSM(概述)

    第一章 Spring概述 1 1 Spring概述 1 1 1 什么是Spring 1 1 2 框架的优点 1 13 Spring的体系结构 1 Core Container 核心容器 2 Data Access Integration 数
  • PHP 在某个范围内,随机生成N个数,总和等于M

    param int count 随机数数量 param int sum 总和 param int mix 最小值 param int max 最大值 function getRand count sum mix max ini set me
  • java 定义全局list_JAVA中如何声明一个全局变量

    2018 06 07 回答 在一个全局类里面定义公共静态变量 public class global public static int abc 0 public static int def 0 解决方案 title global des
  • 数据结构 第二章线性表

    线性表的逻辑结构 线性表的定义 线性表是一种线性结构 在一个线性表中数据元素的类型是相同的 或者说线性表是由 同一类型的数据元素构成的线性结构 定义如下 线性表是具有相同数据类型的n n 0 个数据元素的有限序列 通常记为 a 1 a 2

随机推荐

  • 链游知识5:如何读懂链游项目白皮书

    链游玩家 出品 前言 链游知识是链游玩家专门推出的针对入门玩家的区块链游戏知识科普 从小白到高玩 看链游玩家就够了 本期将会给大家介绍一个比较重要的知识点 那就是尝试学会阅读链游类项目的白皮书 白皮书是获取这个项目的理念 运行规则 经济模型
  • MYSQL的基础架构

    了解MySQL 超详细的MySQL工作原理 体系结构 1 MySQL体系结构 2 MySQL内存结构 3 MySQL文件结构 4 innodb体系结构 一 了解MySQL前你需要知道的 引擎是什么 MySQL中的数据用各种不同的技术存储在文
  • Docker学习:docker网络

    在已经安装docker的服务器 通过网络命令来查看网络 ip addr 会出现一堆地址 但是我们主要看前面的部分 如下 会有三个网络 lo本地 eth0内网 docker0 docker0地址 问题 docker是如何处理容器网络访问的 r
  • 有关服务器购买和部署完整流程

    服务器购买和部署全流程 一 服务器 二 阿里云账户 三 账户登录 四 根据需要 选择方案并购买 1 根据情况 选择购买 2 选择购买的服务器类型 3 核对信息 2 最后再次确认 五 OK完成 返回控制台 六 服务器购买完成 本篇小结
  • python获取本年每一天

    代码如下 yunx import arrow def getAllYearDate year int param year 年份 eg 2022 2023等 return date list start date s 1 1 year a
  • Docker 安装 Nginx 容器

    一 Nginx是什么 Nginx是十分轻量级的HTTP服务器 Nginx 它的发音为 engine X 是一个高性能的HTTP和反向代理服务器 同时也是一个IMAP POP3 SMTP 代理服务器 Nginx是由俄罗斯人 Igor Syso
  • 神经网络正向传播及反向传播原理分析——神经网络之softmax(5)

    转载https forecast blog csdn net article details 96465982 spm 1001 2014 3001 5502 通过对本系列的学习 你可以全面的了解softmax的来龙去脉 如果你尚不了解神经
  • 服务器购买是有无系统,买服务器含不含操作系统

    买服务器含不含操作系统 内容精选 换一换 Atlas 800 训练服务器 型号 9010 安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 800 训练服务器 用户指南 型号9010 Atlas 800 训练服务器 型号
  • 【软件测试】Linux部署测试环境(在本地部署的Linux环境中进行测试活动)(Linux上安装java、mysql、redis详细过程)

    1 在Linux上安装java 使用命令行 获取root用户权限 su root 需要输入root密码 安装jdk命令 yum install java 1 8 0 openjdk 其他命令 yum search java grep jdk
  • 9.13

    70 爬楼梯 进阶 class Solution public int climbStairs int n int dp new int n 1 设置背包容量 n个 int m 2 有两个物品 注意这是一个完全背包问题 dp 0 1 ini
  • Codeforces Round #808 (Div. 2)

    小吃一波分 A Difference Operations 贪心从左往右推过去就好 首先a2肯定要是a1的倍数 不然减不到0 同样的a3也一定要是a2的倍数 但是这里a2可能被操作成a1的其他倍数 比如1 2 3 先变成 1 1 3 然后把
  • CSS基础

    CSS CSS全称层叠样式表 Cascading Style Sheets 是一种标记语言 用于给HTML结构设置样式 如 文字大小 颜色 元素宽高等 HTML搭建结构 CSS添加样式 实现结构与样式分离 CSS编写位置 行内样式 写在元素
  • 【ChatGPT】:告别单调对话,我带你体验

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 1
  • 微信的转账记录删除了还能恢复吗?2个办法教你找回

    微信的转账记录删除了还能恢复吗 除了聊天记录外 好像还有很多朋友对于转账记录的恢复问题呼声也蛮高的 所以 小编这期就给大家带来找回微信转账记录的办法 分别有2个 赶紧进入正题 我们一起来看看到底是什么办法吧 方法1 手机微信上找回微信的转账
  • phpstrom查看代码总行数_一个统计PHP代码行数的小代码

    想统计一下项目中一共有多少行代码 结果没找到什么好的工具 就自己写了一个 效率不怎么样 Created by PhpStorm User luyanfeng Date 16 7 12 Time 下午1 45 param dir return
  • 【Qt】编译QtCreator

    一 Ubuntu14 04编译QtCreator 4 0 3 1 准备工作 编译工具要求 Qt gt 5 5 0 g gt 4 7 2 编译步骤 cd
  • python3字符串内括号匹配分析器匹配分析字符串内括号的匹配闭合情况

    python3字符串内括号匹配分析器 匹配分析字符串内括号的匹配闭合情况 可通过print打印匹配情况 高亮显示错误处 思路 遍历字符串 检测到起始括号后加入到open队列中 位置 字符 检测到闭合括号后检测队列最后一位是否是对应的起始括号
  • 洛谷P1085 不高兴的津津

    题目描述 津津上初中了 妈妈认为津津应该更加用功学习 所以津津除了上学之外 还要参加妈妈为她报名的各科复习班 另外每周妈妈还会送她去学习朗诵 舞蹈和钢琴 但是津津如果一天上课超过八个小时就会不高兴 而且上得越久就会越不高兴 假设津津不会因为
  • 对js对象、数组扁平化的理解

    数组 对象扁平化主要运用的有两个知识点 一个是数据类型的判断 另一个则是递归的运用 instanceof 判断数据类型 obj instanceof Object 判断对象 arr instanceof Array 判断数组 先来一段网上c
  • go高性能并发服务器,【Zinx第四章-全局配置】Golang轻量级并发服务器框架

    四 Zinx的全局配置 随着架构逐步的变大 参数就会越来越多 为了省去我们后续大频率修改参数的麻烦 接下来Zinx需要做一个加载配置的模块 和一个全局获取Zinx参数的对象 4 1 Zinx V0 4增添全局配置代码实现 我们先做一个简单的