• [交流分享] [华为云享专家:张汝涛 视频公开课]【直播立即报名,观看抽奖送大礼】90%代码如何实现自动迁移到鲲鹏平台
    详细内容,请参考:https://bbs.huaweicloud.com/signup/532bb33791ab4cf0923814df6c36ad52 快来报名吧,学习和讨论鲲鹏技术,又能拿大奖直播开始后请点击直播链接:https://huaweicloud.bugu.mudu.tv/watch/ym1bzp7p 观看说明:1、本活动面向所有对鲲鹏感兴趣的用户,登录华为云账号后进行报名预约。没有账号?马上注册2、预约报名后,华为云专家运营团队会在直播当天推送直播链接给您直播时间:2019.12.30讲师姓名: 张汝涛
  • [介绍/入门] 【限时免费】华为云专家带你5节课玩转区块链服务!赢立式鼠标、书籍等好礼!
    《华为云区块链全景实践课》开始招募啦! 点击了解活动页>>>点击查看学习视频>>> 本期课程结合华为云区块链服务 BCS,从入门到实战,全场景学习 区块链服务。5节实战精品课,课程内容涵盖BCS基础概念、各行各业的应用现状、智能合约及DApp开发等,让你系统性掌握BCS。 华为云资深工程师为你讲解!搭配每日实践操作5节课带你从入门到实战轻松玩转区块链服务BCS!——【扫码回复“BCS”免费报名】——活动报名时间:2019年11月28日-2019年12月08日课程学习时间:2019年12月09日-2019年12月13日参与打卡任务赢码豆换立式鼠标、区块链书籍、蓝牙音箱等好礼,知识+好礼双丰收!码豆有什么用:码豆=立式鼠标、蓝牙音箱、书籍、自拍杆等精美礼品!!!可以在华为云专属码豆商城兑换精美礼品更多礼品可点击查看:华为云专属码豆商城>>>扫码报名
  • [技术干货] 华为开发云能否支持这样的开源平台?能否实现其中的网状关联度的需求?
        10月26号在全国人大常委会举办的专题讲座上中国工程院梅宏院士提出“以开源为基础构建自主可控的大数据产业生态”,非常有必要!国外开源社区的成功和繁荣已证明了开源的优势!我认为不仅限于软件开源,还可以问题为导向建立从问题环节开始,到解决方案(思路)、设计环节的开源,任何个人和组织都可提交特定问题特定环节的成果并评价他人的成果,后一环节须自主确定所关联依据的前一环节成果及关联度,每个环节都可组织专家或机构对成果进行评定和评奖,并以知识产权(著作权)保护成果。设计之后的开发(研发)环节从保护的角度考虑开发方可选择不开源,如不开源则必须具备测评机构的评定才能被后续环节关联,如开源则不强制评定。对于最后的运营环节,是由大公司、投资方等意向方与意向成果的开发方及前项环节参与方协商买断或投资后再得以落实。这是大概的一个过程,其中还有几个问题,我考虑如下:    问题1:整个过程如何维护?需建立一个开源平台进行维护,如前述,问题、解决方案、设计三环节的成果须提交至平台开源,开发环节的成果如开源则提交否则不提交且都需说明所使用的技术平台,开发成果评定、投资、运营等环节登记备案相关情况即可。维护的重点是后一环节须指明所关联依据的各项前一环节成果及关联度,比如以100做为后环节成果整体价值,后环节应给所依据的各项前环节成果分配价值占比即关联度,剩下的为自身的价值占比,前环节可与后环节协商关联度,协商不成可申请仲裁。一旦某成果被关联则不得再变更、删除,但可将变更后成果提交为新成果并关联至该成果。可以看出环节间存在阶段关联,环节内存在迭代关联,可分别称之为大/小环节关联。并且可以跨问题关联,即某问题链条的某环节参照了其它问题链条的某环节;关联环节的前后顺序一般是按照问题、解决方案、设计等的阶段顺序,但也存在反阶段顺序的情况,如由设计产生了对解决方案的新变更、由解决方案甚至设计生成了新问题。如此将形成一个网状的关联度,看似复杂实则每个环节成果维护好自身的关联度即可。关联度将成为后期可能收益的分配依据且是即时分配。    问题2:如何避免开源成果被使用但未在平台注册关联的情况?这种情况无法避免,开源的成果任何人和组织都可使用,但如果在平台注册关联所带来的好处远远大于未注册,比如能更快参与形成链条、能更快的获得投资产生收益,那么相信一般都会主动在平台注册关联。    问题3:如何保证平台的可信?区块链技术可保障平台可信,此时可由华为、阿里、腾讯等几大平台分别负责一个中心节点,再由政府负责一个中心节点予以监管。但在区块链技术成熟前,可暂由政府组织几大平台联合组建的企业负责搭建和维护。    问题4:如何扩大平台的影响?平台是以问题为导向,而很多问题并不限于国内才有,很多国家都普遍存在,所以可吸引更多国家的力量使用乃至建设平台。    这样的开源平台具备“开放、灵活、广泛、低成本、高保障”的特点,分析如下:    特点1、开放:任何人和组织都可参与其中,可以是个人、企事业单位、政府、高校和研究机构等;可以是来自国内外地区;可以来自不同领域。    特点2、灵活:主要体现在关联成果的选择上,后一环节自主选择关联的前一环节成果,专家和机构对前一环节成果的评定可为选择提供参考。    特点3、广泛:又包括两个方面1)、参与方的广泛:上述开放特点体现了这点;2)、问题题材的广泛:只要是法无禁止的问题即可借助平台解决。    特点4、低成本:体现在开源是自愿参与不需要事先支付产生成果所涉及的费用,后期如其成果在投资涉及的关联链条中时即会受益。    特点5、高保障:体现在1)、成果受到知识产权保护,关联链条使利益得以保障,从而保障参与者积极性;2)、开放和广泛的特点保障了丰富的参与方;3)、灵活特点使得整个过程自发组织,保障了高效解决路径的产出。    平台具备的上述特点可保障把焦点聚焦在关键制约问题即知识产权和关联度上,能轻松逾越过由人性弱点和信息不对称筑成的高墙,将解决问题的相关能力方自发且迅速的聚合形成合力,因而能大大降低创新成本和提升创新成功率,迅速产生良好的经济和社会效益。对于平台可能遇到的不利因素,其一在于开源方式在国内特别是非IT行业是比较超前的做法,基础不足,在初期会有些难度,但长远看这是正确的方向,此外,问题导向及全球力量的参与都可有力促进开源平台的发展;其二是相关配套机制不足,比如上述中提到的对关联度异议仲裁的法规、开源平台的运行机制和细则等,需要组织相关方面专家制定明确。
  • [技术干货] 华为云MVP&云享专家月刊(10月)
    点击访问华为云MVP&云享专家论坛10月,华为云MVP&云享专家内容运营中,专家技术公开课直播:1场,专家活动举办1场,专家社区博文发布共计305篇(云享专家292篇,MVP13篇),专家论坛发帖共计44篇(云享专家37,MVP7篇),本月线上共计活跃48人(专家云享专家36,MVP12),活跃度占专家总人数:10%10月华为云专家技术公开课精选【实战直播】60分钟教你高效完成鲲鹏云服务移植主讲嘉宾:赵敏敏嘉宾简介:华为云·云享专家鲲鹏服务移植案例分享直播,介绍了:ARM架构与X86架构异同点介绍、鲲鹏移植注意事项、案例介绍、成果展示等,直播PV1300+,评论94,社群曝光量:3W+为何有的程序可以同时在X86和ARM架构的CPU上运行,而有的不行,它们背后的原因到底是什么?为何程序移植到鲲鹏服务器需要重新编译、打包和调试呢,直接运行为何不行?鲲鹏服务器程序移植都有哪些注意事项?鲲鹏服务器移植是否已有成熟的案例可供参考?1.   ARM架构与X86架构异同点介绍2. 移植注意事项3. 移植案例介绍4. 移植成果展示5. 移植专家服务团队6. 鲲鹏服务介绍华为云MVP月度内容精选(top 3)鲲鹏服务器开通流程以及注意事项作者:王立国      华为云MVPModelArts微认证零售客户分群知识点总结作者:郑永祥      华为云MVP[编织梦想 程就未来]学习是很艰难的一件事!作者:杨向明云享专家月度内容精选(top 3)华为云文字识别服务关键技术等落地注意事宜作者:王晶      华为云·云享专家容易造成单片机内存溢出的几个陷阱作者:蓝茂焜      华为云·云享专家Github带来的不止是开源,还有折叠的认知作者:张帆           华为云·云享专家专家月度内容专题精选专题作者:李亚琛    【物联网成长记】如何开发物联网应用?【物联网成长记】OceanConnect物联网平台概念全景【物联网成长记】如何进行物联网大数据分析?【物联网成长记】由浅入深了解NB-IoT【物联网成长记】物联网主流通信协议解读专题作者:赵敏敏华为鲲鹏云calico网络组件适配aarch64架构攻关报告华为鲲鹏云KBengine arm64编译问题实践报告华为鲲鹏云服务最佳实践-Zabbix-4.0安装配置指南华为鲲鹏云服务最佳实践Prelink-1.0安装配置指南华为鲲鹏云服务最佳实践xsp-4.5(rpm)安装配置指南华为云专家活动运营#1024攻城狮,做时代的英雄#说出程序员背后的故事1024程序员活动,讲出程序员的故事,一起为程序员打call,收集优秀故事分享9个,活动PV:7000,评论87,社群曝光量:3W+精彩故事【1024攻城狮,做时代的英雄】#2012年是我自高中以来最瘦的时候,不是因为我主动想减肥,而是连续10个月的项目攻关、上线,让我这名新手程序员对于食物失去了兴趣,每天脑袋里想着都是API如何设计,接口如何实现,跟哪里模块要交互,写好的代码需要经过多次review深怕引入bug。尝试了非计算机专业的人从事计算机行业的迷茫、无助、被嘲笑、奋力追赶,但是最欣慰的是最后项目成功交付,当听到PL说,你们的代码已经在德国运行的时候,作为程序员的骄傲全部被满足,值!2015年换了新的项目,有次晨会听到PL跟测试人员说,“测试就是个良心活”,当时的我被这句朴素的话震感到了,是啊,这句话说出了我的心声,不止测试,开发、设计、资料都是良心活,你可以选择敷衍草草了事,也可以选择仔仔细细、兢兢业业的做事。从此,在攻城狮之路上,我都把这句“开发是个良心活”作为我做事的指引和标准,要求自己精益求精,要求自己不断学习新知识,新工具。有能力、有见识可以让“良心活”更出彩。 专家微话题讨论 欢迎大家踊跃报名直播!联系人:李跃 l84103911  18665852735Best   Regards.
  • [活动分享] 【ModelArts 专家•微话题】上汽AI架构师任如意邀你一起讨论AI实现情绪识别案例
    微话题 “ModelArts实现人脸情绪识别有哪些应用场景?”请大家能够畅所欲言,有机会得到专家回复哦。=======【华为云·微话题】人脸识别技术门槛是什么,有哪些应用场景? =======在苦恼猜不透女友的小情绪?快来听华为云顶级AI专家的技术公开课吧!华为云MVP、上汽集团云计算中心AI架构师【任如意】老师将亲自为大家展示如何利用ModelArts实现人脸情绪识别。不论你的她是不露声色还是喜形于色,AI出马,瞬间便知~再也不怕猜不透她的小情绪,AI让她更爱你!还有价格超低的云服务器,购买后就能立刻上线部署人脸情绪识别小程序,多种趣味应用创意立刻走起,服务天下苦爱群体,瞬间激增男友力,开启你创业的第一桶金!微话题活动:参与本次微话题讨论,有机会获得优质评论奖,赢取书籍。活动时间:2019年8月27日-9月1日参与方式:直接在本帖回复关于以上5个问题中的任意1个或多个问题的理解或评论获奖方式:活动结束后,将由EI小助手  选取出3名优质评论奖,各送出《极简人工智能》书籍1本。评奖标准:回复话题数量和内容质量。本期微话题奖品优质评论:张辉:在现实中,可以预见的场景可能有以下几种:(1)车站、地铁安检反恐(2)医院防止医闹,医患,避免冲突激化(3)HR现场面试求真(4)由家庭智能设备识别家人的情绪,对其进行心理安抚和指导(5)工作场所针对情绪不佳者提醒,避免出现安全事故(6)儿童情绪实时侦测与应对优质评论:不做梦的星星:人工智能:替代人的重复劳动力,及模拟人的一些操作场景。                 大家最多的使用:监督学习,非监督学习。                 在机器学习和深度学习方面                 目前哪些场景能靠机器学习解决,哪些场景可以用深度学习。                 人工智能的典型场景:人大战阿尔法狗下围棋,机器人安防,机器人踢足球,无人驾驶,仿生智能飞鸟等                未来:自动学习,有钱人,有科技玩具替代真实生活中的动物。                还有那些是人工智能不能做到,思想,艺术设计,有知识的创新等。               人工智能是帮助人更轻松,更舒适,更高效和便捷。帮助人更了解自己。
  • [技术干货] 【华为云专家在线公开课第6期】11.5日60分钟教你高效完成鲲鹏云服务移植
  • [技术干货] 【华为云专家在线公开课第7期】11.7日ModelArts实现LOL小地图英雄头像分析案例
    当今时代是人工智能高速发展的时代,深度学习已经渗透入经济、工业、军事、娱乐等各各领域的角落。近年来AlphaGo击败李世石更是使得人工智能技术家喻户晓。人工智能在游戏领域的开发依然不断进步,包括增加游戏的可玩性,模拟真实世界,增加挑战性,帮助叙述故事,同时我们也可以利用AI技术对其他选手操作进行分析可以迅速得出其操作规律,从而弥补自身的不足或找到针对方式。本次直播,我们邀请了华为云·云享专家 钱希睿,给大家介绍基于YOLO的LOL小地图英雄头像分析模型,并引导观众通过ModelArts一站式开发平台带领大家实操。
  • 【限时免费】华为云专家团带你5节课玩转Redis!赢全景相机、书籍好礼!
     《华为云Redis全景实践课》开始招募啦!怎样才能玩转当下热门的Redis?华为云专家组团为你讲解!5位华为云专家倾囊相授,搭配每日实践操作5节课带你从入门到实战轻松玩转Redis!扫码添加小助手微信,回复“Redis”即可免费报名!本期课程结合华为云分布式缓存服务Redis,从入门到实战,全场景学习Redis。5节实战精品课,囊括分布式缓存Redis基础入门及特性、proxy集群、大key热key在线分析、读写分离、在线迁移等,让你系统性掌握Redis。 参与打卡任务,还有机会获得华为生态智能插座、Redis书籍、华为全景相机等超值奖品,知识+好礼双丰收! 活动过程如遇大量用户参与,会导致暂时无法添加助手微信号,大家可以稍等一段时间后再试。活动中有任何疑问,请添加智能应用平台小助手(微信:zhongjianjianxiaoge)咨询另外,对本次活动有任何想法和建议,欢迎在评论区回帖哦~ 
  • [专家FAQ] 华为云·云享专家申请流程&MVP申请表
    华为云·云享专家申请流程&MVP申请表
  • [技术干货] 【图文直播结束】华为全联接大会,华为云专家为你直播
    9月18至9月20日,为期三天的华为全联接大会(HUAWEICONNECT)在上海的世博展览馆和展览中心举办,此次大会以“共创智能新高度”为主题,将发布AI和云的最新产品与解决方案,也将分享如何应用AI和云的技术,为开发者提供了一个“全方面、多场景、系统化”了解行业最新技术成果和众多现场体验的机会。那么现场有哪些看点呢?华为云专家小编将为你现场图文直播来不及去现场的小伙伴可以点链接看直播啦https://bbs.huaweicloud.com/webinar/80a8c63e6e2a432f87c6dcede622b394上午9点,华为公司董事,战略研究院院长徐文伟发布了《共创智能新高度》的主题演讲,向现场的合作合作伙伴和开发者报告了华为的最新成果和时间,华为沃土计划升级版重磅亮相。华为的计算产业战略分享华为沃土计划升级版,构建开放生态分享行业智能化发展方向和实践
  • [线上活动] 【9.22】2019深圳敏捷之旅十周年大会-华为云专家看点
    近年来,随着移动互联网时代的到来,精益、敏捷、产品管理、DevOps等前沿管理思想与先进技术受到广泛关注,组织的敏捷转型和变革越来越热门。简单的体系已经无法帮助企业抵抗外部快速的变化和满足企业创新的需求,DevOps、看板方法、Scrum等关键词,不再“洋气”,而是开始进入中国的本土企业当中,成为许多中国企业在这个时代变革转型的诺亚方舟。在深圳这座国内移动互联网发展速度最快的城市,敏捷转型早已在许多具有前瞻意识和风险意识的企业当中推广开来了:从团队敏捷到规模化敏捷,从个人到企业组织架构……但是在这个向敏捷转型过程中,大家的困惑也越来越多:如何在企业内部有效地切入并且推动敏捷?如何让团队成员从小白转型成高手?如何突破敏捷转型的瓶颈?等等……这些问题,在今年的2019深圳敏捷之旅十周年大会,你能得到解答。敏捷之旅的目的是提供一个高效有趣的敏捷开发学习途径,在全球范围内推广敏捷的思想和实践,帮助企业更好的实施敏捷。每年的冬天,敏捷之旅会在全世界各地举办,其中中国有20多个城市,深圳是全球敏捷之旅活动中的重要一站。深圳敏捷之旅在2019年迎来了大会的第10个年头,在过去的10年中敏捷在深圳逐渐的落地生根发芽,如今敏捷遍地开花,深圳敏捷之旅见证了敏捷在深圳的发展。2019深圳敏捷之旅十周年将于2019年9月22日举行,这次依然是干货满满,不仅有来自业界大咖分享的趋势动态,也有来自通信、互联网、金融行业的一线企业(华为、腾讯、百度、阿里、招行等)带来的实践分享。本期大会,华为云专家(云享专家&MVP)看点
  • [技术干货] 云享专家韦世东:WebSocket 从入门到写出开源库
    前言我已经 2 个月没有发文了,看到有人问: '那个专注爬虫小奎因去哪了?',我就赶紧跳出来了。另外说明一下,德玛西亚之翼-奎因这个 ID 现在换成了 AsyncIns我计划在今年的夏天去北京,在去之前我需要做好技术准备,所以最近一直是在学习。我的学习方式很简单明了:看文档、读源码、造轮子。造轮子是我认为能让人进步的最快、最有效的方法。前段时间需要通过 WebSocket 爬取一些数据,网上文章介绍中,都是使用了 websocket-client 这个库。但我的项目是异步的,我希望 websocket 数据读取也能够是异步的,然后我在 github 上搜索到了 websockets 这个库,在使用和源码阅读中,我发现 websockets 仍然不是我认为理想的库,所以我决定自己开发一个异步的 WebSocket 连接客户端(async websocket client)。这一次我就跟大家分享 WebSocket 协议知识以及介绍我的开源库 aiowebsocket。WebSocket 协议和知识WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。为什么会有 WebSocket以前,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。 而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。 在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。WebSocket 有什么优点开销少、时时性高、二进制支持完善、支持扩展、压缩更优。较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。 保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有* 状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。握手是怎么回事?WebSocket 是独立的、创建在 TCP 上的协议。Websocket 通过HTTP/1.1 协议的101状态码进行握手。为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。WebSocket 协议规范WebSocket 是一个通信协议,它规定了一些规范和标准。它的协议标准为 RFC 6455,具体的协议内容可以在tools.ietf.org中查看。协议共有 14 个部分,其中包括协议背景与介绍、握手、设计理念、术语约定、双端要求、掩码以及连接关闭等内容。双端交互流程客户端与服务端交互流程如下所示:客户端 - 发起握手请求 - 服务器接到请求后返回信息 - 连接建立成功 - 消息互通所以,要解决的第一个问题就是握手问题。握手 - 客户端关于握手标准,在协议中有说明:The opening handshake is intended to be compatible with HTTP-based server-side software and intermediaries, so that a single port can be used by both HTTP clients **ing to that server and WebSocket clients **ing to that server. To this end, the WebSocket client's handshake is an HTTP Upgrade request:Upgrade: websocket Connection: Upgrade 复制代码Connection 和 Upgrade 这两个头域告知服务端,要求将通信的协议转换为 websocket。其中 Sec-WebSocket-Version、Sec-WebSocket-Protocol 这两个头域表明通信版本和协议约定, Sec-WebSocket-Key 则作为一个防止无端连接的保障(其实并没有什么保障作用,因为 key 的值完全由客户端控制,服务端并无验证机制),其他几个头域则与 HTTP 协议的作用一致。握手 - 服务端刚才只是客户端发出一个 HTTP 请求,表明想要握手,服务端需要对信息进行验证,确认以后才算握手成功(连接建立成功,可以双向通信),然后服务端会给客户端回复:"小老弟你好,没有内鬼,连接达成!"服务端需要回复什么内容呢?client: Hello, server boy server: Hello, client girl 复制代码跟我们在微信和 QQ 中发信息是一样的吗?虽然我们看到的信息是这样的,但是在传输过程中可不是这样子的。传输这部也有相应的规定:In the WebSocket Protocol, data is transmitted using a sequence of frames. To avoid confusing network intermediaries (such as intercepting proxies) and for security reasons that are further discussed in Section 10.3, a client MUST mask all frames that it sends to the server (see Section 5.3 for further details). (Note that masking is done whether or not the WebSocket Protocol is running over TLS.) The server MUST close the connection upon receiving a frame that is not masked. In this case, a server MAY send a Close frame with a status code of 1002 (protocol error) as defined in Section 7.4.1. A server MUST NOT mask any frames that it sends to the client. A client MUST close a connection if it detects a masked frame. In this case, it MAY use the status code 1002 (protocol error) as defined in Section 7.4.1. (These rules might be relaxed in a future specification.)The base framing protocol defines a frame type with an opcode, a payload length, and designated locations for "Extension data" and "Application data", which together define the "Payload data". Certain bits and opcodes are reserved for future expansion of the protocol.协议中规定传输时并不是直接使用 unicode 编码进行传输,而是使用帧(frame),数据帧协议定义了带有操作码的帧类型,有效载荷长度,以及“扩展数据”和的指定位置应用程序数据”,它们共同定义“有效载荷数据”。某些位和操作码保留用于将来的扩展协议。数据帧的格式如图所示:帧由以下几部分组成: FIN、RSV1、RSV2、RSV3、opcode、MASK、Payload length、Masking-key、Payload-Data。它们的含义和作用如下:1.FIN: 占 1bit%x0:表示一个延续帧。当 Opcode 为 0 时,表示本次数据传输采用了数据分片,当前收到的数据帧为其中一个数据分片; %x1:表示这是一个文本帧(text frame); %x2:表示这是一个二进制帧(binary frame); %x3-7:保留的操作代码,用于后续定义的非控制帧; %x8:表示连接断开; %x9:表示这是一个心跳请求(ping); %xA:表示这是一个心跳响应(pong); %xB-F:保留的操作代码,用于后续定义的控制帧。 复制代码4.Mask: 1bit表示是否要对数据载荷进行掩码异或操作。0~126:数据的长度等于该值; 126:后续 2 个字节代表一个 16 位的无符号整数,该无符号整数的值为数据的长度; 127:后续 8 个字节代表一个 64 位的无符号整数(最高位为 0),该无符号整数的值为数据的长度。 复制代码6.Masking-key: 0 or 4bytesimport asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri):     async with AioWebSocket(uri) as aws:         converse = aws.manipulator         message = b'AioWebSocket - Async WebSocket Client'         while True:             await converse.send(message)             print('{time}-Client send: {message}'                   .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), message=message))             mes = await converse.receive()             print('{time}-Client receive: {rec}'                   .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__':     remote = 'ws://echo.websocket.org'     try:         asyncio.get_event_loop().run_until_complete(startup(remote))     except KeyboardInterrupt as exc:         logging.info('Quit.') 复制代码运行后就会得到如下结果:# 开启 ssl 即可 import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri):     async with AioWebSocket(uri, ssl=True) as aws:         converse = aws.manipulator         message = b'AioWebSocket - Async WebSocket Client'         while True:             await converse.send(message)             print('{time}-Client send: {message}'                   .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), message=message))             mes = await converse.receive()             print('{time}-Client receive: {rec}'                   .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__':     remote = 'wss://echo.websocket.org'     try:         asyncio.get_event_loop().run_until_complete(startup(remote))     except KeyboardInterrupt as exc:         logging.info('Quit.') 复制代码运行结果与上方运行结果类似。除此之外,aiowebsocket 还允许自定义请求头,在连接一些需要校验 origin、user-agent 和 host 头域信息的网站时,自定义请求头就非常有用了:<pre style="font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;font-size: 1em;line-height: 1.75;overflow: auto;>import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri, header):     async with AioWebSocket(uri, headers=header) as aws:         converse = aws.manipulator         message = b'AioWebSocket - Async WebSocket Client'         while True:             await converse.send(message)             print('{time}-Client send: {message}'                   .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), message=message))             mes = await converse.receive()             print('{time}-Client receive: {rec}'                   .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__':     remote = 'ws://123.207.167.163:9010/ajaxchattest'     header = [         'GET /ajaxchattest HTTP/1.1',         'Connection: Upgrade',         'Host: 123.207.167.163:9010',         'Origin: http://coolaf.com',         'Sec-WebSocket-Key: RmDgZzaqqvC4hGlWBsEmwQ==',         'Sec-WebSocket-Version: 13',         'Upgrade: websocket',         ]     try:         asyncio.get_event_loop().run_until_complete(startup(remote, header))     except KeyboardInterrupt as exc:         logging.info('Quit.') 复制代码ws://123.207.167.163:9010/ajaxchattest 是一个免费的、开放的 WebSocket 连接测试接口,它在握手阶段会校验 origin 头域,如果不符合规范则不允许客户端连接。项目 Github 地址为https://github.com/asyncins/aiowebsocket欢迎各位前去 star ,如果能给出建议或者发现 bug 那就更美了。文章来源:掘金社区作者:云享专家韦世东
  • [技术干货] 云享专家韦世东:Python如何爬取实时变化的WebSocket数据
    Python如何爬取实时变化的WebSocket数据 一、前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据、股市实时数据或币圈实时变化的数据。如下图: ![20190906ly0001.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/201909/06/1031571tkuvog8zi6r0pdn.png) Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSocket 这两种。轮询指的是客户端按照一定时间间隔(如 1 秒)访问服务端接口,从而达到 '实时' 的效果,虽然看起来数据像是实时更新的,但实际上它有一定的时间间隔,并不是真正的实时更新。轮询通常采用 拉 模式,由客户端主动从服务端拉取数据。 WebSocket 采用的是 推 模式,由服务端主动将数据推送给客户端,这种方式是真正的实时更新。 二、什么是 WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket 优点 较少的控制开销:只需要进行一次握手,携带一次请求头信息即可,后续只传输数据即可,相比 HTTP 每次请求都携带请求头,WebSocket 非常省资源。 更强的实时性:由于服务器可以主动推送消息,这使得延迟变得可以忽略不计,相比 HTTP 轮询的时间间隔,WebSocket 可以在相同的时间内进行多次传输。 二进制支持:WebSocket 支持二进制帧,这意味着传输更节省。 …… 爬虫面对 HTTP 和 WebSocket Python 中的网络请求库非常多,Requests 是最常用的请求库之一,它可以模拟发送网络请求。但是这些请求都是基于 HTTP 协议的。在面对 WebSocket 的时候 Requests 就发挥不料作用了,必须使用能够连接 WebSocket 的库。 三、爬取思路 这里以莱特币官网 http://www.laiteb.com/ 实时数据为例。WebSocket 的握手只发生一次,所以如果需要通过浏览器开发者工具观察网络请求,则需要在打开页面的情况下,打开浏览器开发者工具,定位到 NewWork 选项卡,并输入或刷新当前页面,才能观察到 WebSocket 的握手请求和数据传输情况。这里以 Chrome 浏览器为例: ![20190906ly0002.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/201909/06/103242z9hdodjetuojam0y.png) 在开发者工具中提供了筛选功能,其中 WS 选项代表只显示 WebSocket 连接的网络请求。 这时候可以看到请求记录列表中有一条名为 realTime 的记录,鼠标左键点击它后,开发者工具会分为左右两栏,右侧列出本条请求记录的详细信息: ![20190906ly0003.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/201909/06/103335dgd4dcnzyflhbilj.png) 与 HTTP 请求不同的是,WebSocket 连接地址以 ws 或 wss 开头。连接成功的状态码不是 200,而是 101。 Headers 标签页记录的是 Request 和 Response 信息,而 Frames 标签页中记录的则是双方互传的数据,也是我们需要爬取的数据内容: Frames 图中绿色箭头向上的数据是客户端发送给服务端的数据,橙色箭头向下的数据是服务端推送给客户端的数据。 从数据顺序中可以看到,客户端先发送: {"action":"subscribe","args":["QuoteBin5m:14"]} 复制代码 然后服务端才会推送信息(一直推送): {"group":"QuoteBin5m:14","data":[{"low":"55.42","high":"55.63","open":"55.42","close":"55.59","last_price":"55.59","avg_price":"55.5111587372932781077","volume":"40078","timestamp":1551941701,"rise_fall_rate":"0.0030674846625766871","rise_fall_value":"0.17","base_coin_volume":"400.78","quote_coin_volume":"22247.7621987324"}]} 复制代码 所以,从发起握手到获得数据的整个流程为: 那么,现在问题来了: 握手怎么弄? 连接保持怎么弄? 消息发送和接收怎么弄? 有什么库可以轻松实现吗? 四、aiowebsocket Python 库中用于连接 WebSocket 的有很多,但是易用、稳定的有 websocket-client(非异步)、websockets(异步)、aiowebsocket(异步)。 可以根据项目需求选择三者之一,今天介绍的是异步 WebSocket 连接客户端 aiowebsocket。其 Github 地址为:https://github.com/asyncins/aiowebsocket。 ReadMe中介绍到: AioWebSocket是一个遵循 WebSocket 规范的 异步 WebSocket 客户端,相对于其他库它更轻、更快。 它的安装和其他库一样简单,使用 pip install aiowebsocket 即可。安装好后,我们可以根据 ReadMe 中提供的示例代码来测试: import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator message = b'AioWebSocket - Async WebSocket Client' while True: await converse.send(message) print('{time}-Client send: {message}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), message=message)) mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__': remote = 'ws://echo.websocket.org' try: asyncio.get_event_loop().run_until_complete(startup(remote)) except KeyboardInterrupt as exc: logging.info('Quit.') 复制代码 运行后的结果输出为: 2019-03-07 15:43:55-Client send: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:55-Client receive: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:55-Client send: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:56-Client receive: b'AioWebSocket - Async WebSocket Client' 2019-03-07 15:43:56-Client send: b'AioWebSocket - Async WebSocket Client' …… 复制代码 send 表示客户端向服务端发送的消息 recive 表示服务端向客户端推送的消息 五、编码获取数据 回到这一次的爬取需求,目标网站是莱特币官网: 从刚才的网络请求记录中,我们得知目标网站的 WebSocket 地址为:wss://api.bbxapp.vip/v1/ifcontract/realTime,从地址中可以看出目标网站使用的是 wss,也就是 ws 的安全版,它们的关系跟 HTTP/HTTPS 一样。aiowebsocket 会自动处理并识别 ssl,所以我们并不需要作额外的操作,只需要将目标地址赋值给连接 uri 即可: import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator while True: mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__': remote = 'wss://api.bbxapp.vip/v1/ifcontract/realTime' try: asyncio.get_event_loop().run_until_complete(startup(remote)) except KeyboardInterrupt as exc: logging.info('Quit.') 复制代码 运行代码后观察输出,你会发现什么都没有发生。既没有内容输出,也没有断开连接,程序一直在运行,但是什么都没有: 这是为什么呢? 是对方不接受我方的请求吗? 还是有什么反爬虫限制呢? 实际上,刚才的流程图可以解释这个问题: 整个流程中有一步是需要客户端给服务端发送指定的消息,服务端验证后才会不停推送数据。所以,应该在消息读取前、握手连接后加上消息发送的代码: import asyncio import logging from datetime import datetime from aiowebsocket.converses import AioWebSocket async def startup(uri): async with AioWebSocket(uri) as aws: converse = aws.manipulator # 客户端给服务端发送消息 await converse.send('{"action":"subscribe","args":["QuoteBin5m:14"]}') while True: mes = await converse.receive() print('{time}-Client receive: {rec}' .format(time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), rec=mes)) if __name__ == '__main__': remote = 'wss://api.bbxapp.vip/v1/ifcontract/realTime' try: asyncio.get_event_loop().run_until_complete(startup(remote)) except KeyboardInterrupt as exc: logging.info('Quit.') 复制代码 保存后运行,就会看到数据源源不断的推送过来: 到这里,爬虫就能够获取到想要的数据了。 aiowebsocket 做了什么 代码不长,使用的时候只需要将目标网站 WebSocket 地址填入,然后按照流程发送数据即可,那么 aiowebsocket 在这个过程中做了什么呢? 首先,aiowebsocket 根据 WebSocket 地址,向指定的服务端发送握手请求,并校验握手结果。 然后,在确认握手成功后,将数据发送给服务端。 整个过程中为了保持连接不断开,aiowebsocket 会自动与服务端响应 ping pong。 最后,aiowebsocket 读取服务端推送的消息 【奎因:】如果你认为 aiowebsocket 帮助了你,那么请你到 Github https://github.com/asyncins/aiowebsocket 上给一个 Star。如果在使用当中发现问题或者希望给 aiowebsocket 提建议,那么也可以到 Github 上提出。只要你提出建议,就一定能够帮助 aiowebsocket 变的更好,而 aiowebsocket 也能够继续为你服务。
  • [技术干货] 华为云MVP&amp;云享专家内容月刊(8月)
    点击访问华为云MVP&云享专家论坛8月华为云专家技术公开课精选ModelArts实现人脸情绪识别案例分享主讲嘉宾:任如意嘉宾简介:华为云MVP;人脸表情识别(facialexpression recognition, FER)作为人脸识别技术中的一个重要组成部分,近年来在人机交互、安全、机器人制造、自动化、医疗、通信和驾驶领域得到了广泛的关注,成为学术界和工业界的研究热点。本次课程介绍了人脸识别中的表情识别的相关内容,并基于ModelArts AI一站式开发平台带领大家实操。l人脸情绪识别背景介绍及简单综述l情绪识别算法介绍l实操演示l介绍ModelArts的任务模式、模型发布等模块MVP月度内容精选(top 3)文章标题:我在ModleArts平台七十天作者:毛昌启    文章标题:云原生技术实践 白皮书作者:阮仕贲文章标题:模拟真实AI开发场景,构建图像分类应用作者:滕云云享专家月度内容精选(top 3)深度学习-通用模型调试技巧作者:杜奇  新工科工程实践创新设计赛Baseline作者:石伟     世界人工智能大会:一站式 AI 开发平台 ModelArts作者:陈亮     华为云专家月度专题精选【云图说】第136期 搬迁本地数据至OBS的几种方式读书笔记—《销售铁军》随记1【云图说】第137期 新一代通用计算型云服务器S6- 通用不平凡,超高性价比读书笔记—《销售铁军》随记2【云图说】第138期 云计算小课之快速购买弹性云服务器-华为云,更懂你!读书笔记—《销售铁军》随记3【云图说】第139期 初识专属分布式存储服务读书笔记—《销售铁军》随记4作者:郭艳艳     云享专家作者:李五军  华为云MVP专家点赞华为云文章精选在鲲鹏云CentOS 7.5上编译安装puppet-agent和puppetserver作者:三刀    华为云MVPSMS迁移:实现其他云服务器迁移到华为云体验作者:付飞   华为云MVP深度解读华为云一站式AI 开发平台 ModelArts 技术架构作者:付佳宁   云享专家华为云专家故事云享专家韦世东:转行两年的 Python 开发者故事云享专家倪升武:第一次品尝失败云享专家张强:深圳流水线工厂,我差点和主管打了起来欢迎大家踊跃报名直播!联系人:李跃   18665852735Best   Regards. 
  • [线上活动] 【9.2-9.30】华为云专家内容搬迁:乐分享 享好礼
    金秋9月,开学季又如约而至又是一个新起点让我们徜徉在学海里,乐享知识的无穷华为云专家文章迁移计划上线啦,期待您的分享发布博文:link     申请成为云享专家:link