Git Product home page Git Product logo

elgongrpc's People

Contributors

elgong avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

elgongrpc's Issues

buglist & todo

buglist: 修复后打勾

  • 连接池健康管理只能维护栈顶?
  • 利用yaml解析出的数据是空值?

todo

  • 服务端的服务注册功能
  • 服务端粘包问题处理?
  • 服务端 连接管理使用 工作池 workPool
  • 配置由yaml 文件解析生成

yaml 解析失败??

问题描述:利用yaml解析出的数据是空值。

原因: 结构体对应字段必须为可导出类型

插件管理中心设计

利用插件中心将所有插件统一管理吧,分散的话有些乱遭遭。。

v1版: 插件统一管理,所有组件,能插件化就插件化,方便未来拓展

v1插件开发的规范:
插件定义时:
1. 同种类型的插件要实现同一个接口; // 解决取出时的类型断言,这样统一起来就容易使用啦;
2. 插件在实现接口时,附带两个变量,插件类型+插件名;
插件使用时:
3. 使用类型定义了的接口来断言; // 插件中心为了通用使用了 interface{}, 使用公共的就统一啦;

package main

import (
	"fmt"
	"goom1/plugin"
)

type LogInterface interface {
	PrintA(string)
}

type LogPlugin struct {

}

func (l LogPlugin) PrintA(msg string){
	fmt.Println(msg)
}

func main(){

	// 注册时, 同种类型的注册的插件实现统一的接口
	log := LogPlugin{}
	plugin.Plugins.Register("log", "mylog", log)

	// 调用时  断言使用接口
	plugin.Plugins.Get("log", "mylog").(LogInterface).PrintA("123")
}

网络模型设计?

目前有点迷,先设计一个迷的版本,未来发现问题再修正吧,rpc和grpc的源码看迷糊了。

**网络模型v1 **:

  • client : pool
  • server: 自己实现 epoll?

pool 设计v1
v1 先只考虑最大连接数,不考虑闲置问题

pool设计要点
- 惰性初始化,需要时再建立连接
- 控制连接数量上限
- 取/ 放操作
- 连接失效需要检测,可以定时任务,也可用时检测。

问题1: 像rpc 这种一般会一个连接长期使用,所以建立连接池比较有必要。
对于客户端我理解,每次访问某个服务时,直接取池子里之前已经建立好的连接,即可。
那服务端呢?需不需要建立连接池?rpc 服务端需要主动给客户端推送消息吗?如果不需要的话,那处理完的连接,直接忽略吗?继续再监听端口?旧的连接会被accept 监听到吗?

问题2**:c s 之间如何互相检测是否关闭
如果客户端异常关闭, 服务端读取数据失败会返回 EOF err
如果服务器关闭,客户端如何检测??????????????????

解答: 服务端通过 read 返回 EOF 来判断 对方掉线
客户端通过 write 心跳包来判断对方掉线

消息协议设计

V1.0 版本

暂时规划:
入口调用 message, 传入要发送的请求,包括请求服务名,服务地址,传入参数,返回参数,。。。
message 调用 codec 进行编码。。。
然后再调用 底层发送出去。。。

默认参数设置-函数选项模式

函数选项模式:

用到知识点: 可变参数列表, 函数体做参数,
WithXXXXX 配置新参数的原理是,通过返回一个函数,该函数可以修改传输参数的默认值。。

具体实现见 connPool

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.