老哥们,我的毕设是开发一款 IM (要求实现对等传输)。
目前的想法是后端用 SpringMVC,前端的话,重心在前台(要求实现移动 app ),准备用 React Native 框架实现安卓端。根据这些天了解的深入,发现坑真的挺多……
现在的问题在于:
①通信的实现方式上,选用 Socket 还是 WebSocket,二者哪个性能更佳?
②移动 app 的通信实现上,用 js 还是混合原生开发(即用 Java )?
听听大家的意见
1
PressOne 2018-04-14 19:14:23 +08:00 via Android
websocket 简单点
|
2
faceair 2018-04-14 19:14:48 +08:00
如果是毕设的话感觉不用特别在意协议开销,并不用像生产环境那么扣性能。websocket 创建连接是 http upgrade 来的,所以第一个请求略大一些,后面协议传输的时候对比裸 tcp 的话每个数据包大约两个字节的 websocket 协议头。
协议可以直接选 mqtt 就好,发布订阅模式,满足你的 IM 需求,mqtt 可以直接走 tcp 也可以走 websocket。 |
3
AmoxiDu OP @faceair 感谢回复。尽可能地考虑性能是带我们的导师要求的😂另外 mqtt 的建议很好,能解决我很大一部分难题
|
5
hyyou2010 2018-04-14 21:17:08 +08:00
毕设简单为好,SpringMVC 和 React Native 都挺耗时间的。
|
6
bobuick 2018-04-14 21:39:56 +08:00
网上有很多 im 的开源,甚至有的连 app 客户端都给实现了简单的 demo。找找参考下
|
7
junan0708 2018-04-14 22:05:47 +08:00 via Android
workerman
|
8
current 2018-04-14 22:15:00 +08:00
使用什么传输层,客户端使用什么技术栈完全不是重点,重点在于 im 自身的协议。
|
9
AmoxiDu OP @hyyou2010 我选的主题其实可大可小,目前的想法是以 soul 为参考模型,额外支持消息漫游同步和自己其他一些创意。RN 的选择倒是的确糟糕,以前有简单 JS 基础,现在学了一周 RN,有些地方还觉得不是很明白。特别是消息漫游同步这块,选库都得一通折腾( Redis+Level db+MySQL 的三层混合结构是真的合理)😂
|
12
lawfun 2018-04-14 22:47:08 +08:00
最简单的方式,
通信用 websocket, 服务端用 https://github.com/TooTallNate/Java-WebSocket, Android https://github.com/codebutler/android-websockets, Android 客户端也用 Java 数据库只用 MySQL。 这样一套下来用到的知识基本都是大学学的。 或者用环信融云之类的? |
13
bhagavad 2018-04-14 23:19:03 +08:00 1
Socket 是一个工具(更狭义一点的话其实就是一组 interface ),其作用就是操作一个 TCP 的链接。
WebSocket 是一个应用层协议,通过 http 握手,然后建立 TCP 链接,其特点就是可以比较好的兼容浏览器等。 从性能角度而言,并没有什么差别 ,都是 TCP 链接,更重要的是要看传输的数据格式,xml、json、protobuf、thrift 这些的选择反而会更影响传输效率。 mqtt 是一个基于代理的轻量级的 pub/sub 的消息传输协议。优点就是对带宽等硬件要求较低,适用于物联网场景。缺点可能就是 borker 的选择会有一定的难度。不知道现在开源的质量是否靠得住。 关于移动端实现 IM,建议还是用 native,在重连、notification 处理方面 RN 还是有一定问题的,而且 Android 端不同设备、不同版本的差异性还是比较明显的,用 js 后期处理也会有一定的问题。 另外就是看题目感觉应该是本科的毕设,本科毕设大多情况下更关注的是应用层的东西,具体使用什么协议反而不是重心,如果是这种情况的话,可以使用一些第三方服务来快速搭建,比如 融云、LeanCloud、野狗、环信等,他们也有不少开源的 IM 套件。 |
16
current 2018-04-15 01:40:11 +08:00
@AmoxiDu 其实在我理解的架构里面,这种技术选型是优先级较低的。。对于 im 这种重业务和一致性的场景,后端的分层,数据模型的定义,传输协议的设计才是应该考虑的东西。具体怎么实现并不构成较大的障碍。
|
17
laxenade 2018-04-15 01:44:59 +08:00 via Android
前端其实可以考虑用普通网页+phonegap 毕竟只是毕设,RN 的坑也不少。
|
18
AmoxiDu OP @bhagavad 首先感谢回复。经过仔细各位老哥们的回复,我觉得把重心放在 Android 端开发比较合理,不过服务器端还是自己实现比较好,以前有过不少 JavaWeb 经验(其实还有一些 native 安卓应用开发经验😂),实现部分功能的 REST API 还是可以的。不过是否弃用 RN 转向 native,我还得考虑一下,因为 RN 是一位带毕设的老师推荐的😂。
|
19
ETiV 2018-04-15 02:05:57 +08:00
Java ? XMPP/Openfire 了解一下
|
20
AmoxiDu OP @laxenade 我们开过 JavaWeb 课和 Android 课,这两门课课设要求说实话我觉得还算挺高的,所以这次毕设可能得做的像模像样才能过关😂
|
21
Gathaly 2018-04-15 02:42:16 +08:00
可以考虑 Openfire 现成方案
|
22
sagaxu 2018-04-15 03:30:00 +08:00 via Android
这不是架构,最多至少库的选择
|
23
kindjeff 2018-04-15 09:00:27 +08:00 via iPhone
毕设不是应该直接用各种 IM 的免费额度,下载它们的 sdk 做就好了么(误
|
24
yhzwy 2018-04-15 09:30:52 +08:00
具体要实现哪些功能?
毕设 android 端的功能多实现一点就差不多了吧。。 服务端尽量简单。 |
25
abcbuzhiming 2018-04-15 11:07:16 +08:00
IM 这玩意,做个原理展示不难,往大了做可是超级深坑,楼主你自己实现个架子就不错了,别的少想,想多了的话,光那个“消息到达检测和消息重发尝试”问题就能坑死你。
|
26
xrlin 2018-04-15 15:02:46 +08:00
@abcbuzhiming 非常赞同,这是个深坑,别想一下子就能做得深入、完美,要不腾讯怎么活。
|
27
dltech21 2018-04-16 11:04:05 +08:00
建议找开源的,TeamTalk 就开源了,可以参考我的 https://dltech21.github.io/2018/04/13/%E6%90%AD%E5%BB%BATeamTalk%E6%9C%8D%E5%8A%A1%E5%99%A8/
app 端 https://github.com/DLTech21/Tut-android |
28
ai277014717 2018-04-16 14:01:40 +08:00
协议的话我选 https+pb
|
29
iyangyuan 2018-04-16 15:26:56 +08:00
这个不算架构。。你首先应该想到的问题是如何横向扩展,毕竟 IM 系统不可能是单机部署
|