我为什么腾讯看视频好卡更看好IM或者说腾讯

POCO摄影作品
我为什么更看好IM或者说腾讯
  你觉得IM和搜索那个更重要?  当朋友从MSN上抛出这个问题的时候,我的回答是两者在伯仲之间。因为这两个工具都是我们泡在网上不可或缺的东西。一个交流,一个求知。每一个都必不可少。但如果非得做出一个单选的话,我觉得我会选择IM。  或许很多人和我一样,第一次去迷恋网络的时候是为了找个不知道是狗还是人的陌生网友聊天。我不知道为什么很多人有这个需求,但是它又确实是存在的。有人说过,存在的就是合理的,似乎可以在这里当作一个托辞。当初为什么想着去和陌生人聊天,聊过之后又为什么喜欢和周围的人炫耀这段聊天的经历?我不知道,或许我们人性之中就有这种渴望交流的原始需求,一种我们一生都会存在的需求。为了这个需求,原始的部落发明了语言,然后是文字。并演化成今天的不同文字,不同音律的语言。  你如何看腾讯和百度PK?  又一个朋友抛给了这个话题。如果这两者PK的结果中能够一直有平局的话,我觉得我会一直选择平局。可惜商业的东西总有强弱大小。一个是占领中国60%搜索引擎市场的百度,一个是拥有中国70%即时通讯市场份额的腾讯。两个似乎不想干的东西因为商业利益扯到了一起。百度要进军IM市场,腾讯要进军搜索市场。商业贪婪的个性,总会让这场PK分出一个高低,而非胜负。奠定完这个基础,我就可以抛出我的观点。假如交流真是人性的原始需求,那么去满足这个需求的工具就会一直有着存在的价值,所以我更看好IM。如果腾讯和百度可以作为IM和搜索的代表,那么腾讯在PK中会成为高者,但不一定是赢者。  IM的先入优势  IM对应的不是简单的工具,而是两个或者更多有着沟通交流需求的人。当这些人奔走传递这个工具价值的时候,就已经完成了最高级的营销,最安全的竞争壁垒。因为这些人体会到的是这个工具的使用价值,去口碑传递的也是这种使用价值。商品或者商品服务为什么有价值,是因为它有使用价值。而使用价值对于有需求的人是任何人都一定需要,也一定想尽快满足的,当然也想是一直都满足着的。当这个需求价值圈稳固在一个统一的物体上,几乎所有的人都会默认这就是唯一的一般等价物,虽然事实上可能存在着很多一般等价物。所以一般等价物虽然有很多,但只有第一个广泛流行的才是最大的,也是最有生命力的。  如果腾讯的这个IM可以算作这个第一个一般等价物的话,那么它会一直领先先去。所以腾讯IM肯定会一直有较大的先入优势。  搜索使用价值的次需要性和可置换性  搜索是高级的运用,这个提法似乎也没有异议。当然这个工具的使用价值是比IM的使用价值更高级,但是并不是完全必须的。迎合这个使用价值的需求似乎可以称为次需要。因为非必须所以不那么重要。但是需要搜索的使用价值的需求是一定存在的。  假如百度搜索提供的就是这个使用价值,那么这个使用价值的稳定性就要差一些。因为提供这个使用价值的商品或者商品服务有着太多的选择。需要的时候,我会想到你或者他,而不是只有你。习惯可能会让我们偏向于某一个,但是其余的也不是没机会,毕竟习惯可以改变。  接着我该抛出我的问题了。如果有人做IM想要替代那个先入的IM,你觉得可能性有多大?如果有人做搜索要争夺那个大多数人需要时才想起来的优势搜索,可能性又有多大呢?  IM的先入优势会一直存在,因为它稳固的有些近乎不合理。某一搜索的优势可能会有,但是可置换性又保证这个优势能保持多久呢?所以,IM最稳定,而搜索较之要逊色。如果腾讯和百度真的可以成为IM和搜索的代表的话,那我会有我更看好IM的观点。pkgoogle拗口理论写完自己都晕了,呵呵。
查看更多评论
正在加载,请稍候…QQ2014下载正式版免费下载|QQ2013正式版下载 SP6(9305)官方最新版 - pc6下载站微信,QQ这类IM app怎么做——谈谈Websocket
招聘信息:
本文投稿文章,作者:一缕殇流化隐半边冰霜()前言关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作。直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈我对WebSocket/Socket的一些看法了。要想做IM聊天app,就不得不理解WebSocket和Socket的原理了,听我一一道来。目录1.WebSocket使用场景2.WebSocket诞生由来3.谈谈WebSocket协议原理4.WebSocket 和 Socket的区别与联系5.iOS平台有哪些WebSocket和Socket的开源框架6.iOS平台如何实现WebSocket协议一.WebSocket的使用场景1.社交聊天最著名的就是微信,QQ,这一类社交聊天的app。这一类聊天app的特点是低延迟,高即时。即时是这里面要求最高的,如果有一个紧急的事情,通过IM软件通知你,假设网络环境良好的情况下,这条message还无法立即送达到你的客户端上,紧急的事情都结束了,你才收到消息,那么这个软件肯定是失败的。2.弹幕说到这里,大家一定里面想到了A站和B站了。确实,他们的弹幕一直是一种特色。而且弹幕对于一个视频来说,很可能弹幕才是精华。发弹幕需要实时显示,也需要和聊天一样,需要即时。3.多玩家游戏4.协同编辑现在很多开源项目都是分散在世界各地的开发者一起协同开发,此时就会用到版本控制系统,比如Git,SVN去合并冲突。但是如果有一份文档,支持多人实时在线协同编辑,那么此时就会用到比如WebSocket了,它可以保证各个编辑者都在编辑同一个文档,此时不需要用到Git,SVN这些版本控制,因为在协同编辑界面就会实时看到对方编辑了什么,谁在修改哪些段落和文字。5.股票基金实时报价金融界瞬息万变——几乎是每毫秒都在变化。如果采用的网络架构无法满足实时性,那么就会给客户带来巨大的损失。几毫秒钱股票开始大跌,几秒以后才刷新数据,一秒钟的时间内,很可能用户就已经损失巨大财产了。6.体育实况更新全世界的球迷,体育爱好者特别多,当然大家在关心自己喜欢的体育活动的时候,比赛实时的赛况是他们最最关心的事情。这类新闻中最好的体验就是利用Websocket达到实时的更新!7.视频会议/聊天视频会议并不能代替和真人相见,但是他能让分布在全球天涯海角的人聚在电脑前一起开会。既能节省大家聚在一起路上花费的时间,讨论聚会地点的纠结,还能随时随地,只要有网络就可以开会。8.基于位置的应用越来越多的开发者借用移动设备的GPS功能来实现他们基于位置的网络应用。如果你一直记录用户的位置(比如运行应用来记录运动轨迹),你可以收集到更加细致化的数据。9.在线教育在线教育近几年也发展迅速。优点很多,免去了场地的限制,能让名师的资源合理的分配给全国各地想要学习知识的同学手上,Websocket是个不错的选择,可以视频聊天、即时聊天以及其与别人合作一起在网上讨论问题...10.智能家居这也是我一毕业加入的一个伟大的物联网智能家居的公司。考虑到家里的智能设备的状态必须需要实时的展现在手机app客户端上,毫无疑问选择了Websocket。11.总结从上面我列举的这些场景来看,一个共同点就是,高实时性!二.WebSocket诞生由来1.最开始的轮询Polling阶段这种方式下,是不适合获取实时信息的,客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。客户端会轮询,有没有新消息。这种方式连接数会很多,一个接受,一个发送。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率。2.改进版的长轮询Long polling阶段长轮询是对轮询的改进版,客户端发送HTTP给服务器之后,有没有新消息,如果没有新消息,就一直等待。当有新消息的时候,才会返回给客户端。在某种程度上减小了网络带宽和CPU利用率等问题。但是这种方式还是有一种弊端:例如假设服务器端的数据更新速度很快,服务器在传送一个数据包给客户端后必须等待客户端的下一个Get请求到来,才能传递第二个更新的数据包给客户端,那么这样的话,客户端显示实时数据最快的时间为2×RTT(往返时间),而且如果在网络拥塞的情况下,这个时间用户是不能接受的,比如在股市的的报价上。另外,由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费。3.WebSocket诞生现在急需的需求是能支持客户端和服务器端的双向通信,而且协议的头部又没有HTTP的Header那么大,于是,Websocket就诞生了!上图就是Websocket和Polling的区别,从图中可以看到Polling里面客户端发送了好多Request,而下图,只有一个Upgrade,非常简洁高效。至于消耗方面的比较就要看下图了上图中,我们先看蓝色的柱状图,是Polling轮询消耗的流量,Use case A: 1,000 clients polling every second: Network throughput is (871 x 1,000) = 871,000 bytes = 6,968,000 bits per second (6.6 Mbps)Use case B: 10,000 clients polling every second: Network throughput is (871 x 10,000) = 8,710,000 bytes = 69,680,000 bits per second (66 Mbps)Use case C: 100,000 clients polling every 1 second: Network throughput is (871 x 100,000) = 87,100,000 bytes = 696,800,000 bits per second (665 Mbps)而Websocket的Frame是 just two bytes of overhead instead of 871,仅仅用2个字节就代替了轮询的871字节!Use case A: 1,000 clients receive 1 message per second: Network throughput is (2 x 1,000) = 2,000 bytes = 16,000 bits per second (0.015 Mbps)Use case B: 10,000 clients receive 1 message per second: Network throughput is (2 x 10,000) = 20,000 bytes = 160,000 bits per second (0.153 Mbps)Use case C: 100,000 clients receive 1 message per second: Network throughput is (2 x 100,000) = 200,000 bytes = 1,600,000 bits per second (1.526 Mbps)相同的每秒客户端轮询的次数,当次数高达10W/s的高频率次数的时候,Polling轮询需要消耗665Mbps,而Websocket仅仅只花费了1.526Mbps,将近435倍!!三.谈谈WebSocket协议原理Websocket是应用层第七层上的一个应用层协议,它必须依赖 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:1)大数据的传输可以分片传输,不用考虑到数据大小导致的长度标志位不足够的情况。2)和http的chunk一样,可以边生成数据边传递消息,即提高传输效率。四.WebSocket 和 Socket的区别与联系首先,Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCP 或 UDP )而存在的一个抽象层。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。Socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket,一个Socket由一个IP地址和一个端口号唯一确定。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。Socket在通讯过程中,服务端监听某个端口是否有连接请求,客户端向服务端发送连接请求,服务端收到连接请求向客户端发出接收消息,这样一个连接就建立起来了。客户端和服务端也都可以相互发送消息与对方进行通讯,直到双方连接断开。所以基于WebSocket和基于Socket都可以开发出IM社交聊天类的app五.iOS平台有哪些WebSocket和Socket的开源框架Socket开源框架有:,WebSocket开源框架有:,六.iOS平台如何实现WebSocket协议Talk is cheap。Show me the code ——Linus Torvalds我们今天来看看的实现方法首先这是SRWebSocket定义的一些成员变量@property&(nonatomic,&weak)&id&&
&A&dispatch&queue&for&scheduling&the&delegate&calls.&The&queue&doesn't&need&be&a&serial&queue.
&If&`nil`&and&`delegateOperationQueue`&is&`nil`,&the&socket&uses&main&queue&for&performing&all&delegate&method&calls.
@property&(nonatomic,&strong)&dispatch_queue_t&delegateDispatchQ
&An&operation&queue&for&scheduling&the&delegate&calls.
&If&`nil`&and&`delegateOperationQueue`&is&`nil`,&the&socket&uses&main&queue&for&performing&all&delegate&method&calls.
@property&(nonatomic,&strong)&NSOperationQueue&*delegateOperationQ
@property&(nonatomic,&readonly)&SRReadyState&readyS
@property&(nonatomic,&readonly,&retain)&NSURL&*
@property&(nonatomic,&readonly)&CFHTTPMessageRef&receivedHTTPH
//&Optional&array&of&cookies&(NSHTTPCookie&objects)&to&apply&to&the&connections
@property&(nonatomic,&copy)&NSArray&*requestC
//&This&returns&the&negotiated&protocol.
//&It&will&be&nil&until&after&the&handshake&completes.
@property&(nonatomic,&readonly,&copy)&NSString&*下面这些是SRWebSocket的一些方法//&Protocols&should&be&an&array&of&strings&that&turn&into&Sec-WebSocket-Protocol.
-&(instancetype)initWithURLRequest:(NSURLRequest&*)
-&(instancetype)initWithURLRequest:(NSURLRequest&*)request&protocols:(NSArray&*)
-&(instancetype)initWithURLRequest:(NSURLRequest&*)request&protocols:(NSArray&*)protocols&allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLC
//&Some&helper&constructors.
-&(instancetype)initWithURL:(NSURL&*)
-&(instancetype)initWithURL:(NSURL&*)url&protocols:(NSArray&*)
-&(instancetype)initWithURL:(NSURL&*)url&protocols:(NSArray&*)protocols&allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLC
//&By&default,&it&will&schedule&itself&on&+[NSRunLoop&SR_networkRunLoop]&using&defaultModes.
-&(void)scheduleInRunLoop:(NSRunLoop&*)aRunLoop&forMode:(NSString&*)
-&(void)unscheduleFromRunLoop:(NSRunLoop&*)aRunLoop&forMode:(NSString&*)
//&SRWebSockets&are&intended&for&one-time-use&only.&&Open&should&be&called&once&and&only&once.
-&(void)closeWithCode:(NSInteger)code&reason:(NSString&*)
///--------------------------------------
#pragma&mark&Send
///--------------------------------------
//下面是4个发送的方法
&Send&a&UTF-8&string&or&binary&data&to&the&server.
&@param&message&UTF-8&String&or&Data&to&send.
&@deprecated&Please&use&`sendString:`&or&`sendData`&instead.
-&(void)send:(id)message&__attribute__((deprecated("Please&use&`sendString:`&or&`sendData`&instead.")));
-&(void)sendString:(NSString&*)
-&(void)sendData:(NSData&*)
-&(void)sendPing:(NSData&*)
@end对应5种状态的代理方法///--------------------------------------
#pragma&mark&-&SRWebSocketDelegate
///--------------------------------------
@protocol&SRWebSocketDelegate&-&(void)webSocket:(SRWebSocket&*)webSocket&didReceiveMessage:(id)
-&(void)webSocketDidOpen:(SRWebSocket&*)webS
-&(void)webSocket:(SRWebSocket&*)webSocket&didFailWithError:(NSError&*)
-&(void)webSocket:(SRWebSocket&*)webSocket&didCloseWithCode:(NSInteger)code&reason:(NSString&*)reason&wasClean:(BOOL)wasC
-&(void)webSocket:(SRWebSocket&*)webSocket&didReceivePong:(NSData&*)pongP
//&Return&YES&to&convert&messages&sent&as&Text&to&an&NSString.&Return&NO&to&skip&NSData&->&NSString&conversion&for&Text&messages.&Defaults&to&YES.
-&(BOOL)webSocketShouldConvertTextFrameToString:(SRWebSocket&*)webS
@enddidReceiveMessage方法是必须实现的,用来接收消息的。下面4个did方法分别对应着Open,Fail,Close,ReceivePong不同状态的代理方法方法就上面这些了,我们实际来看看代码怎么写先是初始化Websocket连接,注意此处ws://或者wss://连接有且最多只能有一个,这个是Websocket协议规定的self.ws&=&[[SRWebSocket&alloc]&initWithURLRequest:[NSURLRequest&requestWithURL:[NSURL&URLWithString:[NSString&
stringWithFormat:@"%@://%@:%zd/ws",&serverProto,&serverIP,&serverPort]]]];
&&&&self.ws.delegate&=&
&&&&[self.ws&open];发送消息[self.ws&send:message];接收消息以及其他3个代理方法//这个就是接受消息的代理方法了,这里接受服务器返回的数据,方法里面就应该写处理数据,存储数据的方法了。
-&(void)webSocket:(SRWebSocket&*)webSocket&didReceiveMessage:(id)message
&&&&NSDictionary&*data&=&[NetworkUtils&decodeData:message];
&&&&if&(!data)
//这里是Websocket刚刚Open之后的代理方法。就想微信刚刚连接中,会显示连接中,当连接上了,就不显示连接中了,取消显示连接的方法就应该写在这里面
-&(void)webSocketDidOpen:(SRWebSocket&*)webSocket
&&&&//&Open&=&silent&ping
&&&&[self.ws&receivedPing];
//这是关闭Websocket的代理方法
-&(void)webSocket:(SRWebSocket&*)webSocket&didCloseWithCode:(NSInteger)code&reason:(NSString&*)reason&wasClean:(BOOL)wasClean
&&&&[self&failedConnection:NSLS(Disconnected)];
//这里是连接Websocket失败的方法,这里面一般都会写重连的方法
-&(void)webSocket:(SRWebSocket&*)webSocket&didFailWithError:(NSError&*)error
&&&&[self&failedConnection:NSLS(Disconnected)];
}最后以上就是我想分享的一些关于Websocket的心得,文中如果有错误的地方,欢迎大家指点!一般没有微信QQ那么大用户量的app,用Websocket应该都可以完成IM社交聊天的任务。当用户达到亿级别,应该还有很多需要优化,优化性能各种的吧。最后,微信和QQ的实现方法也许并不是只用Websocket和Socket这么简单,也许是他们自己开发的一套能支持这么大用户,大数据的,各方面也都优化都最优的方法。如果有开发和微信和QQ的大神看到这篇文章,可以留言说说看你们用什么方式实现的,也可以和我们一起分享,我们一起学习!我先谢谢大神们的指点了!
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量3786点击量3252点击量3032点击量2979点击量2856点击量2768点击量2753点击量2737点击量2572
&2016 Chukong Technologies,Inc.
京公网安备8955被浏览12,094分享邀请回答6添加评论分享收藏感谢收起0添加评论分享收藏感谢收起郭学亨- 腾讯IMWeb团队架构师 | 到「在行」来约见我
为什么找一个好的web前端那么难?
自2009年加入腾讯公司,现任腾讯高级web架构师,是IMWEB团队的Team Leader。曾担任QQ核心业务的架构设计师,负责包括ptlogin QQ统一登录项目、QQ注册国际化项目、QQ群及QQ内嵌web等多个亿级访问的项目,目前带领团队开辟教育市场,旨在通过QQ的能力打破教育资源不平等的鸿沟。本人及团队专注于web性能、web可用性、web敏捷迭代及自动化工具构建等领域,建设的web通用组件在腾讯内部接入业务达数十个,有很强的技术影响力。如果你具有以下几方面的疑问:进阶web前端开发需要哪些知识和技能?如何进行前端工程师的筛选和招聘?在技术快速更迭的情况下,如何保持自己的竞争力如何快速实现产品原型如何管理一支web研发团队我愿意与你一同分享我的经验。
进阶web前端开发需要哪些知识和技能?
传统机构如何做好在线教育创新?
在线教育是最火热的风投行业和话题,每个人都会关注到教育的变革和创新。这里充满了各种的机会和挑战。
在这样的情况下,传统教育从业者 在线教育机构容易遭遇:
传统教育机构如何转型
在线教育机构如何获得更多的用户
在线教育机构如何设计自己的教研体系
翻转课堂如何应用和实践
我在腾讯课堂移动团队负责人
我愿意与你分享的内容包括:
快速介绍目前在线教育行业的一些情况
在线教育产品设计讨论
好的教研方式的设计
传播和获取更多资源的方法
PS.在选择与我见面前,请把你的问题更具体化。毕竟一小时的谈话只能解决一个小问题。请把你的问题提前发给我,方便我做更精确的准备,提升见面效率。期待与你的见面。
探讨传统教育转型在线教育,以及在线教育机构的IP高质量化和高
腾讯高级web架构师。
IMWEB团队负责人。
在线教育从业者。
曾负责腾讯最核心的资料,关系链,登录和群等业务的研发。
目前主要在做腾讯课堂,负责web团队的技术架构和团队管理。
曾在北京velocity分享web技术。
只需付几百元,就可以与行家
一对一线下面谈
为您答疑解惑、出谋划策。不满意还能“无忧退款”。
为您答疑解惑、出谋划策。
不满意还能“无忧退款”。

我要回帖

更多关于 腾讯云和阿里云哪个好 的文章

 

随机推荐