首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个开源P2P-IM项目研究

一个开源P2P-IM项目研究

原创
作者头像
brzhang
发布2019-07-04 09:25:23
2.1K0
发布2019-07-04 09:25:23
举报
文章被收录于专栏:玩转全栈玩转全栈

现在,小伙伴觉得隐私是非常重要的一件事情,谁也不希望裸奔在互联网的汪洋大海之中,那么如何做到,P2P IM,无服务器IM.

从Android源代码编译,发现里面有一个cpp的子工程原本想在模拟器上跑一下的,但是发现里面只有arm的静态链接库

所以只能在真机上跑,或者去找到这个静态链接库的x86版本,修改一下这里:

就可以在模拟器上跑了,这个库opus是做音频处理的一个开源库,这里暂时还不知道作者为嘛要装逼弄个ndk玩一玩。不过我想也不妨碍我们求知吧,先看看他封装了哪些JNI,其实挺少了,也就4-5个,看了下大概就是发送语音的时候需要录音,嗯~继续~

其实,我看他源码主要是想了解为什么他上线的速度比较慢每次大概需要20s左右的时间,这对用户体验来说无疑是致命一击。因此,本文的目的其实是重点来关注下java工程,甚至,需要在github上clone一下他的server端看看,才能找到具体原因。我想大概率是server端,因为我体验iOS也是如此之慢的连接速度,但是连上之后体验还好

判断是否需要登录的逻辑比较简单,初次登录之后,在pref中写了一个account数据,姑且是标识符把。然后如果有的化就认为不需要再让用户去登录了,直接就去主界面了,当然还有一重判断,我没框出来,那就是聊天服务ChatMainService 是否开启了,没有开启那是要先开启的。

好吧,所以,我们应该需要看看ChatMainService为什么便秘了呢??

嗯,大概想都不用想,上线逻辑就在这里。细心的你应该看到,isRunning=ture表示服务应启动,但是并没有意味着已经上线,然后就进去了一个消息循环,我看到timer就想笑了,因为我之前看到的消息都是推送过来的,这次换成自己去查,有点接受不了。。。哈哈,先不管这么多,继续

嗯,这个callback有点猛,这么一大堆回调合集啊,万绿丛中一点红,我似乎看到了我上线是由谁接待的了。

OK,我服,这样一个消息过来,全部都滚一边,至于是谁,你们自己区分去吧。继续跟踪

好吧,似乎看到了,继续下去:

嗯,JNI了???

ToxLoadJniLibrary.load("tox4j-c");

那么,跟踪玩之后,看起来整个过程就是一个timer不停的在问tox4j-c.so各种状态啊,然后不停的对各种消息进行分发处理

虽然说上线慢的锅在后端哦【注意是后端而不是后台因为P2P网络不存在服务器的】,但是就这样算了???没门,至少要看看他这个所谓的后端是怎么实现的把。

他后端的项目放在这里https://github.com/TokTok/c-toxcore

好吧,我承认不那么容易看懂,不过初略的看,确实发现不存在一个中心化的后台server,当然然吗中确实有一个文件叫做TCP_server,不过,从注释Implementation of the TCP relay server part of Tox可以初略的看出来,这个是TCP中继服务,从后面我了解到的原理来看,这个很有可能是用来做NAT穿透的。

好吧,最后了解了一下p2p,所以,稍微看了下NAT穿透,嗯,实际上上线缓慢是因为在这些过程中会比较耗时。但是否还有优化空间,目前暂不能下结论。

完了之后,在回过头来看了一下tox的核心源码。发现它是一个分布式的 p2p 网络协议。准确来说,它提供了这样的一个网络协议的各种接口,包含安全加密、DHT 网络、洋葱路由等核心部件的实现,以及朋友请求与连接对话、群聊等模块的实现,它还包含了音视频库以供用户实现音视频交流的功能。

下图是源码中找到的建立连接的函数滴啊用,别看就这么简单的设置了一个回调,其实前面经历过了不少的步骤,比如,设置引导节点,设置tcp中继等等

下面是源码文件目录的一览,可以看到核心部分有加密模块,分布式网络,洋葱路由,以及TCP中继(打通NAT)。

最后奉献一些关于P2P的资料

https://evilpan.com/2015/10/31/p2p-over-middle-box/

https://bitcoin-on-nodejs.ebookchain.org/3-%E6%BA%90%E7%A0%81%E8%A7%A3%E8%AF%BB/3-%E4%B8%80%E4%B8%AA%E7%B2%BE%E5%B7%A7%E7%9A%84p2p%E7%BD%91%E7%BB%9C%E5%AE%9E%E7%8E%B0.html

https://blog.csdn.net/yuezu/article/details/78667146

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档