JS>> rpc>> 返回
项目作者: luolingo

项目描述 :
create rpc server from any golang objects
高级语言: Go
项目地址: git://github.com/luolingo/rpc.git
创建时间: 2021-02-02T06:34:11Z
项目社区:https://github.com/luolingo/rpc

开源协议:MIT License

下载


object-service-bridge

Any go objects convert to the thread safe global RPC service

Suppose a database object

package obdb

// DB export db handle
type DB struct {
errmsg string
db *sql.DB
}

func (me *DB) Connect() bool {
// …
}

func (me DB) Query(sql string) QueryRet {
// …
}

func (me *DB) Disconnect() bool {
// …
}

If we want to as soon as possible convert DB object to:
. Many routines used one DB object
. Centralized control of all SQL queries
. Reduce resource consumption
. No need to wait for time-consuming DB query
. Refactoring existing code as little as possible

You just need the following steps:
1 Generate source code of proxy object for existing DB object

  1. v := obtool.NewGenerateObjectProxy("obrpcservice", "obdb", "DB", "")
  2. v.GenerateProxyObject(&obdb.DB{})
  3. generate DBProxy object that there are the same export methods of DB object

2 Luanch DB service

  1. db := obdb.CreateDB()
  2. rs := obrpcservice.Instance()
  3. rs.AddServiceObject("DB", db)
  4. rs.StartRPCService()

3 Almost no change to old code

old code:

  1. db := obdb.CreateDB()
  2. db.Connect()
  3. var ret *QueryRet
  4. ret = db.Query()
  5. db.Disconnect()

new code:

  1. db := obdb.NewDBProxy(obrpcservice.Instance())
  2. db.Connect()
  3. var ret *QueryRet
  4. ret = db.Query()
  5. db.Disconnect()

There is a fast asynchronous version for each export method

  1. db.Connect()
  2. var ret *QueryRet
  3. ret = db.Query()
  4. db.DisconnectwithoutReturn()

2021/3/26 update

The mutli-objects base on routines-pool support is available now!

1 Generate source code of proxy object for existing DB object

  1. v := obtool.NewGenerateObjectProxy("obrpcservice", "obdb", "DB", "")
  2. v.GenerateProxyObject(&obdb.DB{})

2 Luanch mutli-DBs service

  1. db1 := obdb.CreateDB()
  2. db2 := obdb.CreateDB()
  3. db3 := obdb.CreateDB()
  4. rs := obrpcservice.InstanceExt()
  5. rs.AddServiceObjects("DB", []interface{}{&db1, &db2, &db3})
  6. rs.StartRPCServiceExt()

3 visit db through dbproxy object

  1. db := NewDBProxy(obrpcservice.InstanceExt())
  2. db.Object(0).Connect() // exec connect on db1
  3. db.Object(1).Connect() // exec connect on db2
  4. db.Object(2).Connect() // exec connect on db3
  5. // call db method, system will assign to any free-db object
  6. db.QueryWithoutReturn("11")
  7. db.QueryWithoutReturn("22")
  8. db.Query("22")
  9. db.Object(0).Close()
  10. db.Object(1).Close()
  11. db.Object(3).Close()
  12. rs.StopRPCServiceExt()