共 32 篇文章 |
|
Protobuf简单使用及其抓包分析。早之前就用过Google的Protobuf做数据编码,一直没有深入理解其中的原理,最近做了一次通讯抓包,发现其中很多Protobuf编码的数据包,于是决定分析一下其中的数据包及其编码。首先来简单介绍一下Protobuf的使用,这里以windows下Java开发为例,几个步骤:编写*.proto ->使用google提供的protoc.exe生成*.java-... 阅1 转自Michael波 公众公开 19-02-28 09:19 |
Netty Websocket Server Javascript ClientWebSocket协议的出现无疑是 HTML5 中最令人兴奋的功能特性之一,它能够很好地替代Comet技术以及Flash的XmlSocket来实现基于HTTP协议的双向通信。不过,本文将介绍的是如何使用强大的Netty框架(Netty-3.5.7.Final)来实现WebSocket服务端。WebSocket = window.WebSocket) { socket = new WebSock... 阅1 转自見龍在田 公众公开 19-02-28 09:17 |
Netty系列之Netty百万级推送服务设计要点。对于海量长连接的推送服务,代码处理稍有不慎,就满盘皆输,下面我们针对Netty的架构特点,介绍下如何使用Netty实现百万级客户端的推送服务。幸运的是,Netty提供的ByteBuf支持容量动态调整,对于接收缓冲区的内存分配器,Netty提供了两种:FixedRecvByteBufAllocator:固定长度的接收缓冲区分配器,... 阅1 转自鹰皇软件 公众公开 19-02-28 09:17 |
一种自动反射消息类型的 Google Protobuf 网络传输方案。类型,protobuf 打包的数据没有自带类型信息,需要由发送方把类型信息传给给接收方,接收方创建具体的 Protobuf Message 对象,再做的反序列化。Protobuf 传输格式。Protobuf Message 的一个突出优点是用 optional fields 来避免协议的版本号(凡是在 protobuf Message 里放版本号的人都... 阅70 转0 评0 公众公开 19-02-16 22:11 |
《从零开始搭建游戏服务器》 序列化工具(最优版Protostuff)前言:<dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.0.8</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupI... 阅463 转1 评0 公众公开 17-08-13 14:13 |
注意,未被识别的字段会在反序列化的过程中丢弃掉,所以如果消息再被传递给新的代码,新的字段依然是不可用的(这和proto2中的行为是不同的,在proto2中未定义的域依然会随着消息被序列化)非required的字段可以移除——只要它们的标识号在新的消息类型中不再使用(更好的做法可能是重命名那个字段,例如在字段前添加“OBSOLETE_”前缀,那样的... 阅410 转0 评0 公众公开 17-08-13 14:11 |
Protobuf使用不当导致的程序内存上涨问题作者:祝兴昌 百度质量部。5月,出现问题的模块(以下成为模块)内存有泄露的嫌疑,表现为程序在启动后内存一直在缓慢的上涨。9月,模块线上出现内存报警。1)线上模块的内存一直在上涨,直到机器内存耗尽,模块重启;结合该模块内存的历史表现和近期升级功能的排查结果,我们认为模块的内存增长很可能... 阅1432 转1 评0 公众公开 17-08-13 14:10 |
ParseFromString(book) parseend = datetime.datetime.now() print parseend-parsebegin print len(book) # address_book.我只对比测试了小数据量(1KB)的,序列化及反序列化均循环100次,结果如下:(两次测试的proto文件为同一个,在C++中用的序列化/反序列化函数为ParseFromArray/SerializeToArray,python中用的... 阅1088 转0 评0 公众公开 17-08-13 14:09 |
Java数据通讯中使用Google Protobuf 序列化与反序列化。4.在proto.exe同级目录,编写一个netbean.proto文件,为需要序列化的数据接口加入一个message属性,为每一个字段指定名称和类型,如下所示(message 的名称不能与java_outer_classname 名称相同,不然编译不过 ):Request .request_Net .Request .request_Net request=builder.builder();... 阅507 转0 评0 公众公开 17-08-13 14:06 |
3. 在原有的消息中,不能移除已经存在的required字段,optional和repeated类型的字段可以被移除,但是他们之前使用的标签号必须被保留,不能被新的字段重用。5. [default = default_value]: optional类型的字段,如果在序列化时没有被设置,或者是老版本的消息中根本不存在该字段,那么在反序列化该类型的消息是,optional的字段将被赋予类型相... 阅15 转0 评0 公众公开 17-08-13 14:06 |