IM,让我敬畏的一项技术
在我的观点里,即时通信,p2p,音视频传输是程序开发中很有难度的领域,这也是为什么我们很少看到有程序员可以在自己的应用里实现这些技术,尤其是即时通信,要实现高稳定性,高并发性,及时性,低流量和弹无虚发,需要丰富的开发经验做支撑,仅仅是拿来一个开源项目恐怕是难以完成这项任务的。放眼看看国内有即时通信技术的,无一不是大公司。大部分的程序开发者的大部分工作时间都是用来做业务层面的开发,根本没有时间和精力去潜心研究一整套的技术框架,因为公司要盈利,要挣钱,没那么多闲钱养着你去专研这些东西。当然,大公司的研发部门就不一样了。
好在现在国内已经有团队开始做即时通信集成业务了,比如融云、环信
目前一个项目中正好需要用到即时通信技术,自己搭建是不现实了,时间也来不及。那么问题来了,即时通信技术哪家强?
好吧,我承认是腾讯。可惜腾讯不开展这方面的业务。
最后我选择了融云,问我为什么,我只能说我刚开始只知道融云,而后来融云的技术支持很到位,感觉他们真是用心在做这个产品。关于融云的特性,大家去官网看吧,我说出来就有软文嫌疑了。
养猪的故事
大概是这么回事,你的应用本身肯定带有不少用户对吧,突然有一天,你想让你的这些用户们可以方便地像qq那样沟通,但是自己实现成本有点高,于是有人发现了这方面的需求,他们专门研究这种技术,提供这种服务,开发者只需要使用即可。融云提供的解决方案是这样的,呃,算了,还是讲个故事比较形象。
做为一个程序员,你忍受不了高强度的工作压力,辞职回家养猪去了,成了天蓬元帅。
你养了大概100头公猪,每一头猪都有自己的编号,都有自己的花名,猪迟早要被卖掉,为了日后想念,你还给每头猪拍了头像。
你的猪场没有母猪。(呵呵,好像程序员的工作环境类似:-D)
这一百头公猪被关在不同的猪圈里,互相见不着面。
猪们整天除了吃就是睡,苦闷的不行,想和猪兄猪弟们斗斗地主都不行,聊聊天,说说话什么的就更难了。
你是一个善良的人,看到猪们不开心,你也很发愁,他们不开心,他们就不长肉啊,不长肉你就挣不到钱啊。
于是你想通过什么技术手段来帮助他们进行交流。
就在这个时候,你收到了“促进猪身心健康协会”的邮件,他们宣称已经掌握了一种促进猪之间进行即时通信的高级技术,看到这封邮件,你不禁感到汗颜,想想自己当程序员的时候都没有给人做过IM,现在都有人专业做动物IM了,哎,自己也只有养猪糊口的命了。
汗颜归汗颜,想想能让自己的猪们欢快滴玩耍,也是件好事。于是你决定和“促进猪身心健康协会”进行合作。
“促进猪身心健康协会”告诉你,需要你提供所有猪的编号,猪的花名,猪的头像,然后他们会为每一头猪生成一个专属的铭牌打在猪的耳朵上,这个铭牌上有一串全球独一无二的密钥来标识每一头猪,这个铭牌还有磁性,到时候可以刷卡。
除此之外,每个猪圈里还挂了一台智能电视,猪们平常可以看看动画片,还可以和其他的猪们进行聊天。只要猪们把耳朵靠近这台智能电视,这个电视就会弹出其他猪的头像,它想和哪些猪聊天,就用鼻子选一下,然后就可以开始聊天了
当然了,猪主要是通过声音交流,他们只要哼唧哼唧,“促进猪身心健康协会”就帮助猪们把信息传到对方那里。
于是乎,世界首个即时通信猪场诞生,你的猪场顿时高大上,你家卖的猪的价格水涨船高,国内国外的媒体记者,各国首脑纷纷参观考察,你猪场的猪也越来越多,各路美女也向你表白,从此,出任猪EO,赢取白富美,走向人生巅峰!
靠,我是有多无聊!我不是蛇精病,我不是蛇精病,我不是蛇精病......
服务端搭建
服务端我这里采用了Asp.net MVC Web API 的方式,主要是因为原有的项目的服务端就是用的.net的mvc的,用户管理什么的都已经做好了。现在服务端需要做的工作之一就是,在数据库中增加一个字段用来存放每一个用户的融云密钥,然后在用户添加和用户编辑那里,增加获取密钥的功能,融云已经提供了获取密码的类,直接调用就行。有了密钥,你的这些用户就算是加入到了融云的体系里面了。
除了这项工作,你还需要在移动端的登陆方法里,为用户返回他的密钥,同时返回该用户的好友信息,我把所有需要返回的数据类型定义在一个类里,然后web框架会以json的形式返回给客户端。
返回模型定义 public class LoginResult { public string status { get; set; } public string name { get; set; } public string portrait { get; set; } public string token { get; set; } public List<UserInfo> frindlist { get; set; } } 好友信息定义 public class UserInfo { public string id{get;set;} public string name{get;set;} public string portrait { get; set; } } 登陆api定义,具体实现代码就不贴了public LoginResult Post(UserModel u) { }
Android端需要注意的地方
有了服务端做数据支持,客户端拿到自己的密钥和好友信息后就可以初始化融云的操作了。相关代码在融云的文档和demo都有,我就不贴出来了,说说需要注意的地方
1、连接融云的方法最好写在Activity中。
2、确保设置好友的方法得到了执行 。
3、自定义回话列表,如果需要启动选择好友界面,可以使用如下代码:
Intent intent = new Intent(getActivity(), RongActivity.class); intent.putExtra(RCloudConst.EXTRA.CONTENT, FriendMultiChoiceFragment.class.getName()); startActivity(intent);
上个效果图
那么问题就来了
前十几年IM都是为人类服务,从pc端到移动端,从普通沟通到业务沟通,从专有应用到大众应用,从大公司到创业公司,我就在想,下一个十年应该就是物联网的IM,不管是大企业还是小公司,都可以便捷的构建物联网应用,家居设备,工业设备,监测设备都可以便捷的接入互联网,而物联网的通信技术其实也可以看做是一种IM,届时会出现类似融云这样的集成服务商吗?
所以说,不想养猪的程序员不是好CEO。
好吧,我承认我想吃肉了,最近节食减肥中......
^(* ̄(oo) ̄)^