虚拟服务器hydra,使用hydra构建六大服务器及混合服务器
构建六大服务器及混合服务器
-------------
[github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)
本示例通过最简单的代码,介绍构建6类服务器及组合服务器的方法
一、构建api server
二、构建mqc server
三、构建cron server
四、构建rpc server
五、构建ws server
六、构建web server
七、混合服务器
### 一、构建api server
对外提供http api 服务
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/http"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(http.API),
)
//注册服务
app.API("/hello", hello)
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
对外提供 http://localhost:8080/hello 服务,通过`GET、POST`等请求时返回结果为`success`
[github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)
### 二、构建mqc server
监听消息队列,有新的消息时执行对应的服务
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/mqc"
"github.com/micro-plat/hydra/conf/vars/queue/lmq"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(mqc.MQC),
)
//注册服务
app.MQC("/hello",hello,"queue-name")
//设置消息队列服务器(本地内存MQ,支持redis,mqtt等)
hydra.Conf.MQC(lmq.MQ)
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
监听消息队列`queue-name`,有新消息到达时执行服务`/hello`
本示例以本地内存作为消息队列服务器(单机应用)
[github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)
### 三、构建cron server
提供定时任务服务器,按周期定时执行任务
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/cron"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(cron.CRON),
)
//注册服务
app.CRON("/hello",hello,"@every 5s")
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
每隔5秒执行一次"/hello"服务
### 四、构建rpc server
提供基于json的rpc协议服务器
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/rpc"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(rpc.RPC),
)
//注册服务
app.RPC("/hello",hello)
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
对外提供基于RPC协议的服务,可通过hydra.C.RPC().Request组件进行调用
### 五、构建ws server
提供web socket 服务器
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/http"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(http.WS),
)
//注册服务
app.WS("/hello",hello)
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
对外提供`/ws`服务,外部可通过json方式请求服务`/hello`
[github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)
### 六、构建web server
提供静态文件服务
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/http"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(http.WEB),
)
//配置静态文件
hydra.Conf.WEB.Static(static.WithArchive("./static.zip")) //系统自动解压static.zip自动路由到包中对应的文件
//注册服务
app.WEB("/hello",hello)
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
外部可访问`static.zip`中包含的所有静态文件和`/hello`服务
以上6种类型服务器都以服务注册的方式将服务实现对象注册到服务器,并以相同的方式启动即可使用。
### 七、混合服务器
同一个程序中包含多个服务器
```go
package main
import (
"github.com/micro-plat/hydra"
"github.com/micro-plat/hydra/hydra/servers/http"
"github.com/micro-plat/hydra/hydra/servers/cron"
)
func main() {
app := hydra.NewApp(
hydra.WithServerTypes(http.API,cron.CRON),
)
app.API("/hello",hello)
app.CRON("/hello",hello,"@every 5s")
app.Start()
}
func hello(ctx hydra.IContext) interface{} {
return "success"
}
```
以编译后的二进制文件`flowserver`为例:
```sh
$ ./flowserver run --plat test
```
[github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)
日志如下:
```sh
[2020/07/08 09:36:31.140432][i][29f63e41d]初始化: /test/flowserver/api-cron/1.0.0/conf
[2020/07/08 09:36:31.143027][i][29f63e41d]启动[api]服务...
[2020/07/08 09:36:31.643524][i][b65655312]启动成功(api,http://192.168.4.121:8080,1)
[2020/07/08 09:36:31.643885][i][29f63e41d]启动[cron]服务...
[2020/07/08 09:36:31.844844][i][3908a5ccc]启动成功(cron,cron://192.168.4.121,1)
[2020/07/08 09:36:32.346047][d][3908a5ccc]this cron server is started as master
[2020/07/08 09:36:36.648149][i][01751ece6]cron.request: GET /hello from 192.168.4.121
[2020/07/08 09:36:36.648244][i][01751ece6]cron.response: GET /hello 200 193.356µs
[2020/07/08 09:36:41.651858][i][00f45e17b]cron.request: GET /hello from 192.168.4.121
[2020/07/08 09:36:41.651911][i][00f45e17b]cron.response: GET /hello 200 159.694µs
```
服务已经启动,cron server也开始按周期(每隔5秒执行一次服务`/hello`)执行任务
[github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)
有疑问加站长微信联系(非本文作者)
虚拟服务器hydra,使用hydra构建六大服务器及混合服务器相关推荐
- 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目
大家好 , 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目 . 对 , 用 物理服务器 和 .Net 平台 构建 云平台 . 通过 .Net 构建 分布式 计算集 ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- 如何构建自己的免费无服务器评论框
by Shaun Persad 通过Shaun Persad 如何构建自己的免费无服务器评论框 (How you can build your own free, serverless comment ...
- ginapi服务器性能,gin框架构建Api之:环境配置和路由
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本.具有快速灵活,容错方便等特点.其实对于golang而言,web框架的依赖要远比Python,Java ...
- nt服务器需要的协议,构建没有NT服务器的NT域
作者:杨鹏 国内用户的中小型网络大量采用了WindowsNT作为网络操作系统(NOS),提供诸如用户管理.文件共享等基本网络服务.如果出于工作上的考虑,必须使用WindowsNT域模型来管理网络,同时 ...
- vsftpd创建虚拟用户,解决本地用户不安全问题,增强服务器安全性
转载来源 : vsftpd创建虚拟用户,解决本地用户不安全问题,增强服务器安全性 : 摘要: 前面两篇介绍VSFTPd服务器的匿名用户和本地用户访问,基本满足文件的上传下载任务,今天给大家说说虚拟用户 ...
- 防火墙单个ip映射多台服务器,使用防火墙构建器管理多个服务器的单个防火墙策略...
使用防火墙生成器管理多个服务器的单个防火墙策略 作者:Mike Horn http://www.fwbuilder.org 防火墙构建器是防火墙配置和管理GUI,支持从单个应用程序配置各种防火墙. 支 ...
- 通过python 构建一个简单的聊天服务器
构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...
- 如何利用Linux构建免费的缓存DNS服务器
如何利用Linux构建免费的缓存DNS服务器 实验背景: 小诺公司目前的网络环境是所有用户都可以上外网,而且使用的DNS是通过DHCP服务器获取得到的,DHCP服务器上填写的DNS地址 ...
最新文章
- UNIX环境高级编程笔记之进程控制
- python 红黑树_python学习笔记|红黑树(性质与插入)
- 笔记-高项案例题-2009年上-需求管理
- 前端学习(1848)vue之电商管理系统电商系统的开发模式和技术选型
- 关于注册keil的事儿,为啥注册成功之后keil还是提示会限制2K内存
- 数字图像处理吴娱课后答案_(完整版)数字图像处理每章课后题参考答案
- c语言中 gotoxy() 函数的使用
- Hive建表语句Location与HDFS创建目录
- 坚果pro2官方rom_坚果pro2线刷包_坚果pro2刷机包_坚果pro2固件包_坚果pro2救砖包 - 线刷宝ROM中心...
- pads layout“生成泪滴”
- 英语专业找计算机工作好找吗,我是商务英语专业,工作好找吗?
- 暗影精灵5 设置电池充电阈值
- 【Audio音频兴趣拓展】麦克风阵列_声音定位
- 科研 | 学生研究方向指导 | 技术路线 | 相关学习资源
- Fluent流体材料——NIST Real Gas模型
- python用于数学教学_Python基础
- 陆奇:我现在最看好这四大技术趋势!
- string.h头文件里的函数源代码及调用(尝试编写)
- maven 依赖公司另一项目中的对象,对象里的部分属性set值报错not found
- 移动端PDF阅读器重排版效果对比-小白PDF阅读器与KOReader重排版效果对比
热门文章
- 高斯拉普拉斯卷积核去除噪声
- python函数整理_python内置函数整理
- mmTrix大数据分析平台构建实录
- 上海计算机应用基础考试培训班,上海市计算机一级考试辅导
- Android 车机初体验: Auto,Automotive 傻傻分不清楚?| 开发者说·DTalk
- P7-Windows与网络基础-虚拟机基本操作
- python爬取豆瓣读书并进行图形化分析
- 疫情之下,IT 培训品牌「 IT 兄弟连」宣告停工
- 健身管理系统 -健身管理软件模板
- 安装hmc会依赖bios时间吗_Vmware 5.5下安装HMC7.3.2并安装Vmware tools