请选择 进入手机版 | 继续访问电脑版

默认
发表评论 16
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
iOS 对接 netty 使用 protobuf 数据封装格式不能正常解析的问题
大牛们好!我是刚刚接触 netty公司开发即时聊天要求使用 netty+protobuf
但是对接了好久都没有解决,我的问题如下:
1.netty 是对 socket 的封装, protobuf 是对数据的压缩
2.我自己使用 AsysncSocket 搭建好 ios 的服务器和客户端,使用 protobuf 压缩数据,数据可以传输,也可以正常压缩和解压,展示数据
3.但是对接公司后台服务器的 netty 的时候就不能正常:我 ios 端请求连接后,后台服务器 netty 可以显示连接成功,但是后台发过来的数据缺解析不了,也就不能正常使用,进行后面的操作
4.经过我的查资料好像是 netty 使用的编码器对数据处理了,但是我不知道怎么处理,netty 通信协议的问题
5.求大牛指导指导!

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:Netty ProtoBuf
上一篇:请教iOS环信的UI中title的颜色怎么设置下一篇:求助iOS环信头像为什么显示不出来
推荐方案
评论 16
你的意思是说,你用ios写了一个AsyncSocket服务也写了一个AyncSocket服务端,然后用Protobuf格式,在局域网通信是正常的(编码和解码),对吧?
签名: 《进程永生技术终极揭密:进程被杀底层原理、APP对抗被杀技巧》http://www.52im.net/thread-2921-1-1.html
引用:JackJiang 发表于 2016-07-08 15:06
你的意思是说,你用ios写了一个AsyncSocket服务也写了一个AyncSocket服务端,然后用Protobuf格式,大局域通 ...

好像是,我在去跑一遍试试
引用:JackJiang 发表于 2016-07-08 15:06
你的意思是说,你用ios写了一个AsyncSocket服务也写了一个AyncSocket服务端,然后用Protobuf格式,在局域网 ...

对对,又跑了一遍正常传输和解析
引用:JackJiang 发表于 2016-07-08 15:06
你的意思是说,你用ios写了一个AsyncSocket服务也写了一个AyncSocket服务端,然后用Protobuf格式,在局域网 ...

那肯定是 netty 的问题了,还有 netty 的消息协议我也不知道,问后台,他也刚用 netty 说不知道是啥!
那至少证明,你的ios端socket通信正常,使用profobuf编码和解析也是正常。

唯一的可能就是服务端,你们没有服务端程序员吗?netty服务端不要用它自已带的什么编解码器(netty官方文档是说它提供对protubuf的原生支持),直接对接收到的数据进行编码和解码,只把netty当数据收发通道就行,别赋予它们太多的逻辑,不然后面你要换方案怎么办,而且容易让问题不可控且复杂化
签名: 《进程永生技术终极揭密:进程被杀底层原理、APP对抗被杀技巧》http://www.52im.net/thread-2921-1-1.html
引用:JackJiang 发表于 2016-07-08 15:15
那至少证明,你的ios端socket通信正常,使用profobuf编码和解析也是正常。

唯一的可能就是服务端,你们 ...

现在的问题是后台给我发信息我解析不了(只能打印一堆 NSData)
又不懂 java 不知道他是怎么发送的什么格式的数据,现在 Android 已经做完即时聊天了,所以很急啊
你的意思是android跟他那边的通信是正常的?
签名: 《进程永生技术终极揭密:进程被杀底层原理、APP对抗被杀技巧》http://www.52im.net/thread-2921-1-1.html
引用:JackJiang 发表于 2016-07-08 15:18
你的意思是android跟他那边的通信是正常的?

对对,他们做好啦,都上线啦
你跟他们核实一下android那边的情况:
因为android是用java语言实现,而netty是有java的客户端库的,你问下你的android同事:他是直接用的netty的客户端库来实现的,还是直接用纯tcp socket实现。

如果它客户端用的是netty的客户端库的话,那你解决问题起来就可能要麻烦一点了。
签名: 《进程永生技术终极揭密:进程被杀底层原理、APP对抗被杀技巧》http://www.52im.net/thread-2921-1-1.html
引用:JackJiang 发表于 2016-07-08 15:22
你跟他们核实一下android那边的情况:
因为android是用java语言实现,而netty是有java的客户端库的,你问 ...

他说是使用的 netty 的客户端库连接的
你android的同事真够懒得,这对你ios这边不公平,这意味着它们两边完全不用去理解编码和解的事,反正netty都解决,而你ios无法有这待遇。

可以这么去排查问题:让你服务端同事,先把protobuf关闭,用普通的2进制数据跟你ios这边通信,你ios这边也用普通的2进制,看看你Ios还能不能正常解析。 我之前在用mina做跨平台的时候,就是这样的:mina服务端封装好的东西ios 和纯socket实现的android端 收到的东西里会有几个字节的多余,而使得解析失败。你们试着去排查这个问题。

不过我上次写ios跟netty的服务端通信时,没有遇到不能解析的问题,http://www.52im.net/thread-378-1-1.html

你们两边好好调试,问题不一定出在你这边,你的同事真不给力
签名: 《进程永生技术终极揭密:进程被杀底层原理、APP对抗被杀技巧》http://www.52im.net/thread-2921-1-1.html
看你的描述,这很可能是服务端的问题,你服务端同事太懒,把责任一脚踢给你。
签名: 国庆长假还没有缓过来,请让我静一静,产品狗死远点...
讨论真热烈
我也遇到这个问题,谁能解决啊,妈蛋的,安卓搞定了,我搞了几个礼拜了
引用:zenghl 发表于 2017-02-06 17:07
我也遇到这个问题,谁能解决啊,妈蛋的,安卓搞定了,我搞了几个礼拜了

想办法让你服务端的同事跟你一起调试,这种异构平台的东西只能双方紧密联调才能找出真正原因所在。
签名: 《进程永生技术终极揭密:进程被杀底层原理、APP对抗被杀技巧》http://www.52im.net/thread-2921-1-1.html
正好学习一下
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部