纪要|华阳国际近况更新跟踪纪要
日期:20210120
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
董事长介绍:
华阳有20年的公司发展史,公司成立之初是传统的建筑设计公司,经过蓬勃发展后,公司不断丰富自身的业务结构,目标成为以设计为龙头全产业链布局的科技企业,公司认为未来不仅仅是一家设计公司,要以装配式和BIM为核心技术,成为全产业链的咨询企业,区域开拓上公司的地域相对集中,最近三年开始进行一定程度异地扩张,广西、江西、海南、武汉和香港公司都有分部。
问题:公司的竞争优势和持续性?
回答:装配式龙总:第一,华阳拥有全产业链布局优势,公司具备装配式建筑设计、造价咨询、构件加工、施工组织管理能综合优势,各个业务条线相互赋能,各个环节之间有效衔接;第二,公司通过设计来创造装配式的价值,装配式也能带动传统设计业务增长;第三,公司拥有全国最大的装配式设计团队,人员和规模优势是非常明显的;第四,公司具有丰富的产品体系,在住宅、公用建筑等领域项目经验丰富,短时间内同行很难超越;
董事长唐总补充:公司最早和万科开展合作,当时的优势就是点状的技术优势,这些年把点状的技术优势逐渐转化为全产业链的整合能力,公司所在的优势区域华南市场,又进入到需求爆发增长阶段,相互迭代;
问题:人员的管理和人均产值预期?
回答:建筑是传统行业,尽管装配式和BIM等技术手段可以提升公司的管理半径,但或多或少都涉及到人员管理问题,公司认为人员或者是优秀的设计师是否是公司的核心竞争力这件事本身是值得讨论的,作为企业的核心通过做正确但特别难做的事来建立壁垒;公司认为通过搭建设计平台,通过设立设计院的技术质量标准(客服品牌声誉随机事件)是核心,具体落实到设计环节上,需要CAD模式转变为全面的数据化。短期来看,市场担心公司的人均效能问题,这主要是行业的特点决定的,成本先行,公司人力扩张带来暂时的效率降低。
问题:地产产业链的融资收紧,如何保证回款和现金流?
回答:当一个行业的规模不增长的时候就一定有分化,公司认为地产产业链在存量的竞争下可以克服碎片化,客户端例如万科、招商、华润的集中度在快速提升,他们的集中度提升一定会带动设计院业务的大幅提升,目前公司大客户的回款没有太大压力。
问题:新业务的发展方向,BIM应用的市场化节奏?
回答:三维背后的逻辑是全面的数据化,可以打破行业的认知和边界。基于BIM设计平台搭建推广,深圳公司现阶段已经开始使用,公司内部目标是深圳公司21年要告别传统CAD,背后的逻辑是正向BIM设计至少在效率上要和传统CAD出图持平,尽量做到设计完成同时把造价算出来,与其它公司或者单一软件开发公司相比,公司的优势是平台能够在项目上反复应用迭代,公司希望在远期可以有合作的企业使用,突破掉企业的边界,但暂时没有给软件出售的预期。
问题:现阶段BIM和CAD效率实现上的差异?
回答:公司内部经过迭代后,BIM的正向设计投入在普通CAD的1.2倍。
问题:BIM能够给甲方带来好处,也能够重构设计企业与甲方之间的关系,公司什么时候把技术优势转化费用优势?
回答:设计是一个项目产生数据的起点,70%的工程信息是来源于设计阶段,同时在整个项目的全生命周期中,唯一能够作为法律依据的也是设计文件,算量和政府验收都是这样做的,现阶段对于业主而言,如果要做BIM公司是有很强优势去拿到相应项目的,但如果想通过BIM来提价目前还比较难。
问题:现在做总包管理很多都是从施工发力的,从后端往前端走,这个和公司之间有相似也有不同,各自的优劣势是什么?
回答:整个产业链涉及到设计、算量、施工、物业管理等环节,不同的公司切入点略有差异,设计企业的优势是最前端掌握原始数据,对项目的成本造价把握能力强。
问题:设计端是否有能力通过人工智能解放生产力?
回答:在设计中解决非标准化问题是企业追求的内容,大数据人工智能在行业中一定有其实践的机会,小库做的点是是很小的一段,目前的环节中建筑和结构基本持平,最难的是机电暖通的成本很难打平,这个行业的难点是数据信息量积累,而且是全产业链的数据积累,现在点状的积累有,一定程度的AI也可以说已经具备,但是全面的AI暂时是比较难的。
问题:打擦边球的CAD、BIM之间转换方式?
回答:目前市场上有一些打擦边球的实现方法:1)CAD基础上靠人工变成BIM,只会增加人工,现在是软件把CAD翻模成BIM,这块基本上没有增加多少成本,但是这样操作不能解决图模具一致等问题;2)三维的做一遍变成CAD,发现有问题后再修改CAD的图,这也是有问题的,也是图模不一致的。
问题:设计的底层软件是国外的,国家在谈自主可控,未来国家对于底层软件的自主化是否是趋势?
回答:这个问题比较宏大,目前公司基础的软件和平台是国外的,作为一个设计企业,公司暂时没有开发底层软件的想法。
问题:区域外的扩张的考量是什么?
回答:随客户走,公司合作客户是市场化的,公司在设置异地公司时要求在当地做到民营企业第一,之后慢慢就会和地方政府产生联系。
问题:您认为合意的设计平台具有怎样的特点?产业链由易到难能够突破的点能否介绍一下?
回答:基础是设计这个端点的效率和质量问题,达到和CAD一样的效率和质量,实现算量、增加客户粘度等内容都是附加的。
问题:设计师画图这件事儿能不能实现多大程度的标准化?没有足够的数据积累,非标的客户需求,只靠华阳自己的项目来进行迭代,是否能够实现,要多久?
回答:产业特征是非标准化的,工业生产流水线的问题在设计端很难解决,公司追求的是一定程度的标准化。
问题:设计不同区域的条块分割,更有效的突破?
回答:建筑设计必须考虑生产制造,点状的先发优势变成产业链优势,BIM技术带来变革。
问题:BIM应用在现有项目中占比?
回答:目前只有三分之一的项目在用。
问题:研发费用的投入?
回答:每年5000万,基本是是研发费用支出。
问题:未来人力增长大致的速度?
回答:10%-15%,主要是新设立省会的公司在加人。#股票##价值投资日志[超话]#
日期:20210120
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
董事长介绍:
华阳有20年的公司发展史,公司成立之初是传统的建筑设计公司,经过蓬勃发展后,公司不断丰富自身的业务结构,目标成为以设计为龙头全产业链布局的科技企业,公司认为未来不仅仅是一家设计公司,要以装配式和BIM为核心技术,成为全产业链的咨询企业,区域开拓上公司的地域相对集中,最近三年开始进行一定程度异地扩张,广西、江西、海南、武汉和香港公司都有分部。
问题:公司的竞争优势和持续性?
回答:装配式龙总:第一,华阳拥有全产业链布局优势,公司具备装配式建筑设计、造价咨询、构件加工、施工组织管理能综合优势,各个业务条线相互赋能,各个环节之间有效衔接;第二,公司通过设计来创造装配式的价值,装配式也能带动传统设计业务增长;第三,公司拥有全国最大的装配式设计团队,人员和规模优势是非常明显的;第四,公司具有丰富的产品体系,在住宅、公用建筑等领域项目经验丰富,短时间内同行很难超越;
董事长唐总补充:公司最早和万科开展合作,当时的优势就是点状的技术优势,这些年把点状的技术优势逐渐转化为全产业链的整合能力,公司所在的优势区域华南市场,又进入到需求爆发增长阶段,相互迭代;
问题:人员的管理和人均产值预期?
回答:建筑是传统行业,尽管装配式和BIM等技术手段可以提升公司的管理半径,但或多或少都涉及到人员管理问题,公司认为人员或者是优秀的设计师是否是公司的核心竞争力这件事本身是值得讨论的,作为企业的核心通过做正确但特别难做的事来建立壁垒;公司认为通过搭建设计平台,通过设立设计院的技术质量标准(客服品牌声誉随机事件)是核心,具体落实到设计环节上,需要CAD模式转变为全面的数据化。短期来看,市场担心公司的人均效能问题,这主要是行业的特点决定的,成本先行,公司人力扩张带来暂时的效率降低。
问题:地产产业链的融资收紧,如何保证回款和现金流?
回答:当一个行业的规模不增长的时候就一定有分化,公司认为地产产业链在存量的竞争下可以克服碎片化,客户端例如万科、招商、华润的集中度在快速提升,他们的集中度提升一定会带动设计院业务的大幅提升,目前公司大客户的回款没有太大压力。
问题:新业务的发展方向,BIM应用的市场化节奏?
回答:三维背后的逻辑是全面的数据化,可以打破行业的认知和边界。基于BIM设计平台搭建推广,深圳公司现阶段已经开始使用,公司内部目标是深圳公司21年要告别传统CAD,背后的逻辑是正向BIM设计至少在效率上要和传统CAD出图持平,尽量做到设计完成同时把造价算出来,与其它公司或者单一软件开发公司相比,公司的优势是平台能够在项目上反复应用迭代,公司希望在远期可以有合作的企业使用,突破掉企业的边界,但暂时没有给软件出售的预期。
问题:现阶段BIM和CAD效率实现上的差异?
回答:公司内部经过迭代后,BIM的正向设计投入在普通CAD的1.2倍。
问题:BIM能够给甲方带来好处,也能够重构设计企业与甲方之间的关系,公司什么时候把技术优势转化费用优势?
回答:设计是一个项目产生数据的起点,70%的工程信息是来源于设计阶段,同时在整个项目的全生命周期中,唯一能够作为法律依据的也是设计文件,算量和政府验收都是这样做的,现阶段对于业主而言,如果要做BIM公司是有很强优势去拿到相应项目的,但如果想通过BIM来提价目前还比较难。
问题:现在做总包管理很多都是从施工发力的,从后端往前端走,这个和公司之间有相似也有不同,各自的优劣势是什么?
回答:整个产业链涉及到设计、算量、施工、物业管理等环节,不同的公司切入点略有差异,设计企业的优势是最前端掌握原始数据,对项目的成本造价把握能力强。
问题:设计端是否有能力通过人工智能解放生产力?
回答:在设计中解决非标准化问题是企业追求的内容,大数据人工智能在行业中一定有其实践的机会,小库做的点是是很小的一段,目前的环节中建筑和结构基本持平,最难的是机电暖通的成本很难打平,这个行业的难点是数据信息量积累,而且是全产业链的数据积累,现在点状的积累有,一定程度的AI也可以说已经具备,但是全面的AI暂时是比较难的。
问题:打擦边球的CAD、BIM之间转换方式?
回答:目前市场上有一些打擦边球的实现方法:1)CAD基础上靠人工变成BIM,只会增加人工,现在是软件把CAD翻模成BIM,这块基本上没有增加多少成本,但是这样操作不能解决图模具一致等问题;2)三维的做一遍变成CAD,发现有问题后再修改CAD的图,这也是有问题的,也是图模不一致的。
问题:设计的底层软件是国外的,国家在谈自主可控,未来国家对于底层软件的自主化是否是趋势?
回答:这个问题比较宏大,目前公司基础的软件和平台是国外的,作为一个设计企业,公司暂时没有开发底层软件的想法。
问题:区域外的扩张的考量是什么?
回答:随客户走,公司合作客户是市场化的,公司在设置异地公司时要求在当地做到民营企业第一,之后慢慢就会和地方政府产生联系。
问题:您认为合意的设计平台具有怎样的特点?产业链由易到难能够突破的点能否介绍一下?
回答:基础是设计这个端点的效率和质量问题,达到和CAD一样的效率和质量,实现算量、增加客户粘度等内容都是附加的。
问题:设计师画图这件事儿能不能实现多大程度的标准化?没有足够的数据积累,非标的客户需求,只靠华阳自己的项目来进行迭代,是否能够实现,要多久?
回答:产业特征是非标准化的,工业生产流水线的问题在设计端很难解决,公司追求的是一定程度的标准化。
问题:设计不同区域的条块分割,更有效的突破?
回答:建筑设计必须考虑生产制造,点状的先发优势变成产业链优势,BIM技术带来变革。
问题:BIM应用在现有项目中占比?
回答:目前只有三分之一的项目在用。
问题:研发费用的投入?
回答:每年5000万,基本是是研发费用支出。
问题:未来人力增长大致的速度?
回答:10%-15%,主要是新设立省会的公司在加人。#股票##价值投资日志[超话]#
网页端的消息接收,用什么方式好呢?
电话簿
网页收发消息是一个常见的系统应用场景,通常我们有两种方式来完成消息的发送,一种是通过客户端来拉取消息,一种是服务端推送消息,到底使用哪种方式好一点呢?
具体使用哪种方式,我们需要根据实际的业务场景来分析,没有绝对正确的方式,只有适不适合。所以,我们分析一下网页端的用户一般都存在哪些应用场景:
系统将通知发送给用户——这种场景下,用户对于消息的实时性要求并不高
用户和用户之间发送聊天消息——这种场景下,用户就对实时性的要求很高了,越实时越好
我们抛开纯技术实现不谈,只是从解决方案来谈,由于是使用的是网页端,HTTP协议是通过“请求-响应”的方式传递,网页端和服务端之间是没有消息通道的,那么怎么来实现消息的接收呢?
轮询拉取
轮询拉取可以说是所有消息的实现方案中最简单的一种,实现起来也非常简单。
大致的实现方法如下:
发送方发送消息后,消息先进入队列中暂存(也可以是数据库)
网页端建立一个timer,固定时间(例如:30秒)轮询到队列(或数据库)中拉取消息
无论有没有拉到消息,收到返回的消息后,30秒后再次轮询拉取
这种方式最大的优势就是实现非常简单,而且容易理解,早期的聊天室基本都是这种实现方式,我曾经给朋友做过一个答题的系统,有多个终端,每个终端看到的内容需要有所不同,也是使用的这种实现方式。
当然这种实现方式的缺点也是非常明显:
时效性差:随着timer间隔时间的长短,收到消息的延时时间会被拉长,以30秒为例,消息最大的延时就会达到30秒
效率差:网页端会不停的请求服务器,但是发消息的频率事实上并没有这么高,如果10次轮询才拉到一条消息,那么有效性只有10%,大量的浪费了服务器资源
使用这种方式,时效性和效率是矛盾的,我降低timer的间隔时间,就可以提高时效性,但是会降低效率,例如:间隔时间降低到1秒,这种基本就可以趋近于实时了,但是可能300次轮询才会拉到1条消息,有效性只有0.3%了。
所以,由于这个不可调和的矛盾存在,这种解决方案只能适用于一些同时在线用户少,对实时性要求不高的场景中。
长连接
如果想要同时保证时效性和效率,其实长连接是一个不错的选择,一般我们的PC端聊天软件都是使用的长连接方式来实现。而网页端的长连接实现方式通常有两种:
WebSocket
FlashSocket
FlashSocket就不说了,如果不是网页游戏的话其实很少会用到这个方案来做长连接,它要求用户必须安装了Flash插件。如果是HTML网页端的话,其实更多会选择WebSocket这种方案,WebSocket的优点非常明显,建立一次握手以后,服务端和网页端就可以双向通信了,摆脱了HTTP的Request-Response的限制,消息的及时性和效率都大幅度的提升了。
但是WebSocket也不是那么简单,其中的坑也非常的多,如何单个生产者推送给多个消费者,如何保证不重复推送,断线以后的重连等等。当然更重要的是,不同的浏览器对于WebSocket的支持可能不同,兼容性也是一大问题,所以使用得并不是很多。
那有没有一种更常用的方法来处理消息的接收呢?
HTTP长轮询
想要建立一条HTTP长轮询的通道,我们需要在浏览器和服务器之间建立一条通知连接。
而这条通知连接不同于普通的HTTP连接,它要有一些特殊性:
这个HTTP连接只能用来收取推送的消息
不同于普通的Request-Response HTTP请求,这个HTTP连接不会马上响应,会先被Hold在这里,知道接到通知的消息或者超过了约定的时间(我们都知道,HTTP请求是会有超时的,一般我们都会设置一个请求超时的阈值,如果超过这个阈值,那么请求就会被粗暴的断开,返回一个错误消息,为了保证我们的请求不被粗暴的对待,我们需要在超时之前优雅的返回一个结果)
怎么来Hold住这个请求呢?
场景一:队列里面有消息
发起一个通知连接HTTP请求
发现消息队列里面有消息,于是拿到消息然后立刻返回
收到返回的消息后,立刻再次发起通知连接的请求
场景二:队列里面没有消息
发起一个通知连接HTTP请求
发现消息队列里面没有消息,于是一直等待直到达到时间阈值然后返回
收到返回的消息后,立刻再次发起通知连接的请求
个人认为,长轮询的请求就一直保持对消息队列的数据拉取就行,如果有实时的消息来了,也等到它进入消息队列以后再处理,这样可以防止消息丢失,也可以降低系统的复杂度。
总的来说,网页端的消息接收,用什么方式好呢?拉和推都可以,每种方式有每种方式的优缺点。
如果业务不复杂,实时性不高,建议轮询拉取
最佳方案是推,但是WebSocket和FlashSocket各有局限性,实现起来也麻烦一点
常见方式就是长轮询,需要开辟一条专用的消息通道。 https://t.cn/R2WxlNJ
电话簿
网页收发消息是一个常见的系统应用场景,通常我们有两种方式来完成消息的发送,一种是通过客户端来拉取消息,一种是服务端推送消息,到底使用哪种方式好一点呢?
具体使用哪种方式,我们需要根据实际的业务场景来分析,没有绝对正确的方式,只有适不适合。所以,我们分析一下网页端的用户一般都存在哪些应用场景:
系统将通知发送给用户——这种场景下,用户对于消息的实时性要求并不高
用户和用户之间发送聊天消息——这种场景下,用户就对实时性的要求很高了,越实时越好
我们抛开纯技术实现不谈,只是从解决方案来谈,由于是使用的是网页端,HTTP协议是通过“请求-响应”的方式传递,网页端和服务端之间是没有消息通道的,那么怎么来实现消息的接收呢?
轮询拉取
轮询拉取可以说是所有消息的实现方案中最简单的一种,实现起来也非常简单。
大致的实现方法如下:
发送方发送消息后,消息先进入队列中暂存(也可以是数据库)
网页端建立一个timer,固定时间(例如:30秒)轮询到队列(或数据库)中拉取消息
无论有没有拉到消息,收到返回的消息后,30秒后再次轮询拉取
这种方式最大的优势就是实现非常简单,而且容易理解,早期的聊天室基本都是这种实现方式,我曾经给朋友做过一个答题的系统,有多个终端,每个终端看到的内容需要有所不同,也是使用的这种实现方式。
当然这种实现方式的缺点也是非常明显:
时效性差:随着timer间隔时间的长短,收到消息的延时时间会被拉长,以30秒为例,消息最大的延时就会达到30秒
效率差:网页端会不停的请求服务器,但是发消息的频率事实上并没有这么高,如果10次轮询才拉到一条消息,那么有效性只有10%,大量的浪费了服务器资源
使用这种方式,时效性和效率是矛盾的,我降低timer的间隔时间,就可以提高时效性,但是会降低效率,例如:间隔时间降低到1秒,这种基本就可以趋近于实时了,但是可能300次轮询才会拉到1条消息,有效性只有0.3%了。
所以,由于这个不可调和的矛盾存在,这种解决方案只能适用于一些同时在线用户少,对实时性要求不高的场景中。
长连接
如果想要同时保证时效性和效率,其实长连接是一个不错的选择,一般我们的PC端聊天软件都是使用的长连接方式来实现。而网页端的长连接实现方式通常有两种:
WebSocket
FlashSocket
FlashSocket就不说了,如果不是网页游戏的话其实很少会用到这个方案来做长连接,它要求用户必须安装了Flash插件。如果是HTML网页端的话,其实更多会选择WebSocket这种方案,WebSocket的优点非常明显,建立一次握手以后,服务端和网页端就可以双向通信了,摆脱了HTTP的Request-Response的限制,消息的及时性和效率都大幅度的提升了。
但是WebSocket也不是那么简单,其中的坑也非常的多,如何单个生产者推送给多个消费者,如何保证不重复推送,断线以后的重连等等。当然更重要的是,不同的浏览器对于WebSocket的支持可能不同,兼容性也是一大问题,所以使用得并不是很多。
那有没有一种更常用的方法来处理消息的接收呢?
HTTP长轮询
想要建立一条HTTP长轮询的通道,我们需要在浏览器和服务器之间建立一条通知连接。
而这条通知连接不同于普通的HTTP连接,它要有一些特殊性:
这个HTTP连接只能用来收取推送的消息
不同于普通的Request-Response HTTP请求,这个HTTP连接不会马上响应,会先被Hold在这里,知道接到通知的消息或者超过了约定的时间(我们都知道,HTTP请求是会有超时的,一般我们都会设置一个请求超时的阈值,如果超过这个阈值,那么请求就会被粗暴的断开,返回一个错误消息,为了保证我们的请求不被粗暴的对待,我们需要在超时之前优雅的返回一个结果)
怎么来Hold住这个请求呢?
场景一:队列里面有消息
发起一个通知连接HTTP请求
发现消息队列里面有消息,于是拿到消息然后立刻返回
收到返回的消息后,立刻再次发起通知连接的请求
场景二:队列里面没有消息
发起一个通知连接HTTP请求
发现消息队列里面没有消息,于是一直等待直到达到时间阈值然后返回
收到返回的消息后,立刻再次发起通知连接的请求
个人认为,长轮询的请求就一直保持对消息队列的数据拉取就行,如果有实时的消息来了,也等到它进入消息队列以后再处理,这样可以防止消息丢失,也可以降低系统的复杂度。
总的来说,网页端的消息接收,用什么方式好呢?拉和推都可以,每种方式有每种方式的优缺点。
如果业务不复杂,实时性不高,建议轮询拉取
最佳方案是推,但是WebSocket和FlashSocket各有局限性,实现起来也麻烦一点
常见方式就是长轮询,需要开辟一条专用的消息通道。 https://t.cn/R2WxlNJ
网页端的消息接收,用什么方式好呢?
电话簿
网页收发消息是一个常见的系统应用场景,通常我们有两种方式来完成消息的发送,一种是通过客户端来拉取消息,一种是服务端推送消息,到底使用哪种方式好一点呢?
具体使用哪种方式,我们需要根据实际的业务场景来分析,没有绝对正确的方式,只有适不适合。所以,我们分析一下网页端的用户一般都存在哪些应用场景:
系统将通知发送给用户——这种场景下,用户对于消息的实时性要求并不高
用户和用户之间发送聊天消息——这种场景下,用户就对实时性的要求很高了,越实时越好
我们抛开纯技术实现不谈,只是从解决方案来谈,由于是使用的是网页端,HTTP协议是通过“请求-响应”的方式传递,网页端和服务端之间是没有消息通道的,那么怎么来实现消息的接收呢?
轮询拉取
轮询拉取可以说是所有消息的实现方案中最简单的一种,实现起来也非常简单。
大致的实现方法如下:
发送方发送消息后,消息先进入队列中暂存(也可以是数据库)
网页端建立一个timer,固定时间(例如:30秒)轮询到队列(或数据库)中拉取消息
无论有没有拉到消息,收到返回的消息后,30秒后再次轮询拉取
这种方式最大的优势就是实现非常简单,而且容易理解,早期的聊天室基本都是这种实现方式,我曾经给朋友做过一个答题的系统,有多个终端,每个终端看到的内容需要有所不同,也是使用的这种实现方式。
当然这种实现方式的缺点也是非常明显:
时效性差:随着timer间隔时间的长短,收到消息的延时时间会被拉长,以30秒为例,消息最大的延时就会达到30秒
效率差:网页端会不停的请求服务器,但是发消息的频率事实上并没有这么高,如果10次轮询才拉到一条消息,那么有效性只有10%,大量的浪费了服务器资源
使用这种方式,时效性和效率是矛盾的,我降低timer的间隔时间,就可以提高时效性,但是会降低效率,例如:间隔时间降低到1秒,这种基本就可以趋近于实时了,但是可能300次轮询才会拉到1条消息,有效性只有0.3%了。
所以,由于这个不可调和的矛盾存在,这种解决方案只能适用于一些同时在线用户少,对实时性要求不高的场景中。
长连接
如果想要同时保证时效性和效率,其实长连接是一个不错的选择,一般我们的PC端聊天软件都是使用的长连接方式来实现。而网页端的长连接实现方式通常有两种:
WebSocket
FlashSocket
FlashSocket就不说了,如果不是网页游戏的话其实很少会用到这个方案来做长连接,它要求用户必须安装了Flash插件。如果是HTML网页端的话,其实更多会选择WebSocket这种方案,WebSocket的优点非常明显,建立一次握手以后,服务端和网页端就可以双向通信了,摆脱了HTTP的Request-Response的限制,消息的及时性和效率都大幅度的提升了。
但是WebSocket也不是那么简单,其中的坑也非常的多,如何单个生产者推送给多个消费者,如何保证不重复推送,断线以后的重连等等。当然更重要的是,不同的浏览器对于WebSocket的支持可能不同,兼容性也是一大问题,所以使用得并不是很多。
那有没有一种更常用的方法来处理消息的接收呢?
HTTP长轮询
想要建立一条HTTP长轮询的通道,我们需要在浏览器和服务器之间建立一条通知连接。
而这条通知连接不同于普通的HTTP连接,它要有一些特殊性:
这个HTTP连接只能用来收取推送的消息
不同于普通的Request-Response HTTP请求,这个HTTP连接不会马上响应,会先被Hold在这里,知道接到通知的消息或者超过了约定的时间(我们都知道,HTTP请求是会有超时的,一般我们都会设置一个请求超时的阈值,如果超过这个阈值,那么请求就会被粗暴的断开,返回一个错误消息,为了保证我们的请求不被粗暴的对待,我们需要在超时之前优雅的返回一个结果)
怎么来Hold住这个请求呢?
场景一:队列里面有消息
发起一个通知连接HTTP请求
发现消息队列里面有消息,于是拿到消息然后立刻返回
收到返回的消息后,立刻再次发起通知连接的请求
场景二:队列里面没有消息
发起一个通知连接HTTP请求
发现消息队列里面没有消息,于是一直等待直到达到时间阈值然后返回
收到返回的消息后,立刻再次发起通知连接的请求
个人认为,长轮询的请求就一直保持对消息队列的数据拉取就行,如果有实时的消息来了,也等到它进入消息队列以后再处理,这样可以防止消息丢失,也可以降低系统的复杂度。
总的来说,网页端的消息接收,用什么方式好呢?拉和推都可以,每种方式有每种方式的优缺点。
如果业务不复杂,实时性不高,建议轮询拉取
最佳方案是推,但是WebSocket和FlashSocket各有局限性,实现起来也麻烦一点
常见方式就是长轮询,需要开辟一条专用的消息通道。 https://t.cn/R2WxlNJ
电话簿
网页收发消息是一个常见的系统应用场景,通常我们有两种方式来完成消息的发送,一种是通过客户端来拉取消息,一种是服务端推送消息,到底使用哪种方式好一点呢?
具体使用哪种方式,我们需要根据实际的业务场景来分析,没有绝对正确的方式,只有适不适合。所以,我们分析一下网页端的用户一般都存在哪些应用场景:
系统将通知发送给用户——这种场景下,用户对于消息的实时性要求并不高
用户和用户之间发送聊天消息——这种场景下,用户就对实时性的要求很高了,越实时越好
我们抛开纯技术实现不谈,只是从解决方案来谈,由于是使用的是网页端,HTTP协议是通过“请求-响应”的方式传递,网页端和服务端之间是没有消息通道的,那么怎么来实现消息的接收呢?
轮询拉取
轮询拉取可以说是所有消息的实现方案中最简单的一种,实现起来也非常简单。
大致的实现方法如下:
发送方发送消息后,消息先进入队列中暂存(也可以是数据库)
网页端建立一个timer,固定时间(例如:30秒)轮询到队列(或数据库)中拉取消息
无论有没有拉到消息,收到返回的消息后,30秒后再次轮询拉取
这种方式最大的优势就是实现非常简单,而且容易理解,早期的聊天室基本都是这种实现方式,我曾经给朋友做过一个答题的系统,有多个终端,每个终端看到的内容需要有所不同,也是使用的这种实现方式。
当然这种实现方式的缺点也是非常明显:
时效性差:随着timer间隔时间的长短,收到消息的延时时间会被拉长,以30秒为例,消息最大的延时就会达到30秒
效率差:网页端会不停的请求服务器,但是发消息的频率事实上并没有这么高,如果10次轮询才拉到一条消息,那么有效性只有10%,大量的浪费了服务器资源
使用这种方式,时效性和效率是矛盾的,我降低timer的间隔时间,就可以提高时效性,但是会降低效率,例如:间隔时间降低到1秒,这种基本就可以趋近于实时了,但是可能300次轮询才会拉到1条消息,有效性只有0.3%了。
所以,由于这个不可调和的矛盾存在,这种解决方案只能适用于一些同时在线用户少,对实时性要求不高的场景中。
长连接
如果想要同时保证时效性和效率,其实长连接是一个不错的选择,一般我们的PC端聊天软件都是使用的长连接方式来实现。而网页端的长连接实现方式通常有两种:
WebSocket
FlashSocket
FlashSocket就不说了,如果不是网页游戏的话其实很少会用到这个方案来做长连接,它要求用户必须安装了Flash插件。如果是HTML网页端的话,其实更多会选择WebSocket这种方案,WebSocket的优点非常明显,建立一次握手以后,服务端和网页端就可以双向通信了,摆脱了HTTP的Request-Response的限制,消息的及时性和效率都大幅度的提升了。
但是WebSocket也不是那么简单,其中的坑也非常的多,如何单个生产者推送给多个消费者,如何保证不重复推送,断线以后的重连等等。当然更重要的是,不同的浏览器对于WebSocket的支持可能不同,兼容性也是一大问题,所以使用得并不是很多。
那有没有一种更常用的方法来处理消息的接收呢?
HTTP长轮询
想要建立一条HTTP长轮询的通道,我们需要在浏览器和服务器之间建立一条通知连接。
而这条通知连接不同于普通的HTTP连接,它要有一些特殊性:
这个HTTP连接只能用来收取推送的消息
不同于普通的Request-Response HTTP请求,这个HTTP连接不会马上响应,会先被Hold在这里,知道接到通知的消息或者超过了约定的时间(我们都知道,HTTP请求是会有超时的,一般我们都会设置一个请求超时的阈值,如果超过这个阈值,那么请求就会被粗暴的断开,返回一个错误消息,为了保证我们的请求不被粗暴的对待,我们需要在超时之前优雅的返回一个结果)
怎么来Hold住这个请求呢?
场景一:队列里面有消息
发起一个通知连接HTTP请求
发现消息队列里面有消息,于是拿到消息然后立刻返回
收到返回的消息后,立刻再次发起通知连接的请求
场景二:队列里面没有消息
发起一个通知连接HTTP请求
发现消息队列里面没有消息,于是一直等待直到达到时间阈值然后返回
收到返回的消息后,立刻再次发起通知连接的请求
个人认为,长轮询的请求就一直保持对消息队列的数据拉取就行,如果有实时的消息来了,也等到它进入消息队列以后再处理,这样可以防止消息丢失,也可以降低系统的复杂度。
总的来说,网页端的消息接收,用什么方式好呢?拉和推都可以,每种方式有每种方式的优缺点。
如果业务不复杂,实时性不高,建议轮询拉取
最佳方案是推,但是WebSocket和FlashSocket各有局限性,实现起来也麻烦一点
常见方式就是长轮询,需要开辟一条专用的消息通道。 https://t.cn/R2WxlNJ
✋热门推荐