Comments (1)
自己实现一下codec那个接口就行了,主要是Encode
和Decode
函数。下面例子是解析proto,直接调用google的那个proto库。解析json你就换成json.Marshal
和json.Unmashal
。解析lua你就找个解析lua的第三方库调用一下就行了。
import (
"github.com/davyxu/cellnet"
"github.com/davyxu/cellnet/util"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
"reflect"
)
type protoCodec struct {
}
func (c *protoCodec) Name() string {
return "protobuf" // 随便填
}
func (c *protoCodec) MimeType() string {
return "application/x-protobuf" // 随便填
}
func (c *protoCodec) Encode(msgObj interface{}, _ cellnet.ContextSet) (data interface{}, err error) {
// 这里是直接调用protobuf的Marshal函数,如果你想用lua你就换成lua的就行了
return proto.Marshal(msgObj.(proto.Message))
}
func (c *protoCodec) Decode(data interface{}, msgObj interface{}) error {
// 这里是直接调用protobuf的UnMarshal函数,如果你想用lua你就换成lua的就行了
return proto.Unmarshal(data.([]byte), msgObj.(proto.Message))
}
// 将消息注册到系统
func init() {
c := new(protoCodec)
// 遍历注册所有协议,想手动指定协议ID就改成自己一个一个写
protoregistry.GlobalTypes.RangeMessages(func(messageType protoreflect.MessageType) bool {
cellnet.RegisterMessageMeta(&cellnet.MessageMeta{
Codec: c,
Type: reflect.TypeOf(messageType.Zero().Interface()).Elem(),
ID: int(util.StringHash(string(messageType.Descriptor().Name()))),
})
return true
})
}
from cellnet.
Related Issues (20)
- 请问怎么实现tsl支持 HOT 1
- 例子 HOT 2
- rpc怎么实现嵌套链式调用 HOT 4
- 网络层的小包读取都是readfull和new buffer gc开销会很严重
- 你好,非队列的rpc 处理能否放入独立的goroutine? HOT 2
- websocket
- websocket 链接失败
- 请问v5版本有什么新特性么? HOT 2
- 关于 Pipe 的 Pick 和 Add 两处锁的疑问 HOT 1
- 流量支持TLS加密接口吗 HOT 1
- Pipe的优化建议:减少Pick内的数据拷贝 HOT 1
- pipe.go里面Pick函数
- 请问cellnet适合用作物联网mqtt broker吗? HOT 1
- 没有使用go自带的channel是由于什么原因? HOT 1
- 服务端无法接受4M的请求 HOT 2
- 编解码器 codec 的一个 bug HOT 2
- 在SendLTVPacket里面每次发送都创建一个同样大小的pkt HOT 7
- writeList[0:0]会造成内存泄漏吗 HOT 4
- 有没有网关的实现列子 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cellnet.