构建六大服务器及混合服务器

-------------

[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构建六大服务器及混合服务器相关推荐

  1. 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目

    大家好 , 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目 . 对 , 用 物理服务器 和 .Net 平台 构建 云平台 . 通过 .Net 构建 分布式 计算集 ...

  2. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  3. 如何构建自己的免费无服务器评论框

    by Shaun Persad 通过Shaun Persad 如何构建自己的免费无服务器评论框 (How you can build your own free, serverless comment ...

  4. ginapi服务器性能,gin框架构建Api之:环境配置和路由

    Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本.具有快速灵活,容错方便等特点.其实对于golang而言,web框架的依赖要远比Python,Java ...

  5. nt服务器需要的协议,构建没有NT服务器的NT域

    作者:杨鹏 国内用户的中小型网络大量采用了WindowsNT作为网络操作系统(NOS),提供诸如用户管理.文件共享等基本网络服务.如果出于工作上的考虑,必须使用WindowsNT域模型来管理网络,同时 ...

  6. vsftpd创建虚拟用户,解决本地用户不安全问题,增强服务器安全性

    转载来源 : vsftpd创建虚拟用户,解决本地用户不安全问题,增强服务器安全性 : 摘要: 前面两篇介绍VSFTPd服务器的匿名用户和本地用户访问,基本满足文件的上传下载任务,今天给大家说说虚拟用户 ...

  7. 防火墙单个ip映射多台服务器,使用防火墙构建器管理多个服务器的单个防火墙策略...

    使用防火墙生成器管理多个服务器的单个防火墙策略 作者:Mike Horn http://www.fwbuilder.org 防火墙构建器是防火墙配置和管理GUI,支持从单个应用程序配置各种防火墙. 支 ...

  8. 通过python 构建一个简单的聊天服务器

    构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...

  9. 如何利用Linux构建免费的缓存DNS服务器

    如何利用Linux构建免费的缓存DNS服务器   实验背景:       小诺公司目前的网络环境是所有用户都可以上外网,而且使用的DNS是通过DHCP服务器获取得到的,DHCP服务器上填写的DNS地址 ...

最新文章

  1. UNIX环境高级编程笔记之进程控制
  2. python 红黑树_python学习笔记|红黑树(性质与插入)
  3. 笔记-高项案例题-2009年上-需求管理
  4. 前端学习(1848)vue之电商管理系统电商系统的开发模式和技术选型
  5. 关于注册keil的事儿,为啥注册成功之后keil还是提示会限制2K内存
  6. 数字图像处理吴娱课后答案_(完整版)数字图像处理每章课后题参考答案
  7. c语言中 gotoxy() 函数的使用
  8. Hive建表语句Location与HDFS创建目录
  9. 坚果pro2官方rom_坚果pro2线刷包_坚果pro2刷机包_坚果pro2固件包_坚果pro2救砖包 - 线刷宝ROM中心...
  10. pads layout“生成泪滴”
  11. 英语专业找计算机工作好找吗,我是商务英语专业,工作好找吗?
  12. 暗影精灵5 设置电池充电阈值
  13. 【Audio音频兴趣拓展】麦克风阵列_声音定位
  14. 科研 | 学生研究方向指导 | 技术路线 | 相关学习资源
  15. Fluent流体材料——NIST Real Gas模型
  16. python用于数学教学_Python基础
  17. 陆奇:我现在最看好这四大技术趋势!
  18. string.h头文件里的函数源代码及调用(尝试编写)
  19. maven 依赖公司另一项目中的对象,对象里的部分属性set值报错not found
  20. 移动端PDF阅读器重排版效果对比-小白PDF阅读器与KOReader重排版效果对比

热门文章

  1. 高斯拉普拉斯卷积核去除噪声
  2. python函数整理_python内置函数整理
  3. mmTrix大数据分析平台构建实录
  4. 上海计算机应用基础考试培训班,上海市计算机一级考试辅导
  5. Android 车机初体验: Auto,Automotive 傻傻分不清楚?| 开发者说·DTalk
  6. P7-Windows与网络基础-虚拟机基本操作
  7. python爬取豆瓣读书并进行图形化分析
  8. 疫情之下,IT 培训品牌「 IT 兄弟连」宣告停工
  9. 健身管理系统 -健身管理软件模板
  10. 安装hmc会依赖bios时间吗_Vmware 5.5下安装HMC7.3.2并安装Vmware tools