推介网站数字火币交易网站开发

bicheng/2026/1/19 11:16:27/文章来源:
推介网站,数字火币交易网站开发,c2c模式是指什么,北京专业网站制作最近在做一个iOS IM SDK#xff0c;在内部试用的阶段#xff0c;不断有兄弟部门或者合作伙伴过来问各种技术细节#xff0c;所以统一写一篇文章记录#xff0c;统一介绍下一个IM APP的方方面面#xff0c;包括技术选型(包括通讯方式,网络连接方式,协议选择)和常见问题。 … 最近在做一个iOS IM SDK在内部试用的阶段不断有兄弟部门或者合作伙伴过来问各种技术细节所以统一写一篇文章记录统一介绍下一个IM APP的方方面面包括技术选型(包括通讯方式,网络连接方式,协议选择)和常见问题。 通讯方式选择 IM通讯方式无非两种选择:设备直连(P2P)和通过服务器中转。 P2P P2P多见于局域网内聊天工具典型的应用有:飞鸽传书天网Maze(你懂的)等。这类软件在启动后一般做两件事情 进行UDP广播:发送自己信息和接受同局域网内其他端信息 开启TCP监听:等待其他端进行连接 详细的流程可以参考飞鸽传书源码。但是这种方式在有种种限制和不便:一方面它只适合在线的点对点消息传输而对离线群组等业务支持不够。另一方面由于 NAT 的存在使得不同局域网内机器互联的难度大大上升在某些网络类型(对称NAT)下无法建立连接。 服务器中转 几乎所有互联网IM产品都采用服务器中转这种方式进行消息传输相对于P2P的方式它有如下的优点: 能够支持更多P2P无法支持或支持不好的业务如离线消息群组聊天室服务 方便业务逻辑的拓展和新旧版本的兼容 当然它也有自己的问题:服务器架构复杂并发要求高。 网络连接方式 IM主流网络连接方式有两种: 基于TCP的长连接 基于HTTP短连接PULL的方式 后者常见于WEB IM系统(当然现在很多WEB IM都是基于WebSocket实现)它的优点是实现简单方便开发上手问题是流量大服务器负载较大消息及时性无法很好地保证对大规模的用户量支持不够比较适合小型的IM系统,如一个小网站的客户系统。 基于TCP长连接则够更好地支持大批量用户问题是客户端和服务器的实现比较复杂。当然也还有一些变种如下行使用MQTT进行服务器通知/消息的下发上行使用HTTP短连接进行指令和消息的上传。这种方式能够保证下行消息/指令的及时性但是在弱网络下上行慢的问题还是比较严重。早期的来往就是基于这种方式。 协议选择 IM协议选择原则一般是:易于拓展方便覆盖各种业务逻辑同时又比较节约流量。后一点的需求在移动端IM上尤其重要。 常见的协议有: XMPP SIP MQTT 私有协议 XMPP协议的优点在于:协议开源可拓展性强在各个端(包括服务器)有各种语言的实现开发者接入方便。但是缺点也是不少:XML表现力弱有太多冗余信息流量大实际使用时有大量天坑。 SIP协议多用于VOIP相关的模块是一种文本协议由于我并没有实际用过所以不做评论但从它是文本协议这一点几乎可以断定它的流量不会小。 MQTT的优点是协议简单流量少但是它并不是一个专门为IM设计的协议多使用于推送。 而市面上几乎所有主流IM APP都是是使用私有协议一个被良好设计的私有协议一般有如下优点:高效节约流量(一般使用二进制协议)安全性高难以破解。缺点则是在开发初期没有现有样列可以参考对于设计者的要求比较高。 一个好的协议需要满足如下条件:高效简洁可读性好节约流量易于拓展同时又能够匹配当前团队的技术堆栈。基于如上原则我们可以推出: 如果团队小团队技术在IM上积累不够可以考虑使用XMPP或者MQTTHTTP短连接的实现。反之可以考虑自己设计和实现私有协议。 私有协议的设计 序列化选择 移动互联网相对于有线网络最大特点是:带宽低延迟高丢包率高和稳定性差流量费用高。所以在私有协议的序列化上一般使用二进制协议而不是文本协议。常见的二进制序列化库有protobuf和MessagePack当然你也可以自己实现自己的二进制协议序列化和反序列的过程比如蘑菇街的TeamTalk。但是前面二者无论是可拓展性还是可读性都完爆TeamTalk(TeamTalk连Variant都不支持一个int传输时固定占用4个字节)所以大部分情况下还是不推荐自己去实现二进制协议的序列化和反序列化过程。 协议格式设计 基于TCP的应用层协议一般都分为包头和包体(如HTTP)IM协议也不例外。包头一般用于表示每个请求/反馈的公共部分如包长请求类型返回码等。 而包头则填充不同请求/反馈对应的信息。 一个最简单的包头可以定义为 1 2 3 4 5 6 7 struct PackHeader {     int32_t     length_;    //包长度     int32_t     serial_;    //包序列号     int32_t     command_;   //包请求类型     int32_t     code_;      //返回码 }; 以心跳包为例假设当前的serial为1心跳包的command为10那么使用MessagePack做序列化时:length4serial1command10code0每个字段各占一个字节包体为空仅需要4个字节。 当然这是最简单的一个例子面对真正的业务逻辑时包体里面会需要塞入更多地信息这个需要开发根据自己的业务逻辑总结公共部分,如为了兼容加入的协议版本号,为了负载均衡加入的模块id等。 其他问题 上面就是一个IM系统大致的选型过程:通讯方式连接方式协议选择协议设计。但是实际开发过程中还有大量的问题需要处理。 协议加密 为了保证协议不容易被破解市面上几乎所有主流IM都会对协议进行加密传输。常见的流程和HTTPS加密相似:建立连接后客户端和服务器进行进行协商最终客户端获得一个当前Sessino的秘钥后续的数据传输都通过这个秘钥进行加解密。一般出于效率的考虑都会采用流式加密如RC4。而前期协商过程则推荐使用AES等非对称加密以增加破解难度。 快速连接(登录) 对iOS APP而言因为没有真后台的存在APP每次启动基本都需要一次重连登录(短时间内切换除外)所以如何快速重连重登就非常重要。常见的优化思路如下: 本地缓存服务器IP并定期刷新。移动网络调优可以参考《iOS移动网络调优那些事》。 合并部分请求。如加密和登录操作可以合并为同一个操作这样就可以减少一次不必要的网络请求来回的时间。 简化登录后的同步请求部分同步请求可以推迟到UI操作时进行如群成员信息刷新。 连接保持 一般APP实现连接保持的方式无非是采用应用层的心跳通过心跳包的超时和其他条件(网络切换)来执行重连操作。那么问题来了:为什么要使用应用层心跳和如何设计应用层心跳。 众所周知TCP协议是有KEEPALIVE这个设置选项设置为KEEPALIVE后客户端每隔N秒(默认是7200s)会向服务器发送一个发送心跳包。但实际操作中我们更多的时是使用应用层心跳。原因如下: KEEPALIVE对服务器负载压力比较大(服务器大大是这么说的...) socks代理对KEEPALIVE并不支持 部分复杂情况下KEEPALIVE会失效如路由器挂掉网络直接被拔除 移动端在实际操作时为了节约流量和电量一般会在心跳包上做一些小优化 尽量精简心跳包保证一个心跳包大小在10字节之内 心跳包只在空闲时发送 (收到最后一个数据包n秒内再也没有收到包则进行一次心跳) 根据APP前后台状态调整心跳包间隔 (主要是安卓) 消息可达 在移动网络下丢包网络重连等情况非常之多为了保证消息的可达一般需要做消息回执和重发机制。参考易信每条消息会最多会有3次重发超时时间为15秒同时在发送之前会检测当前连接状态如果当前连接并没有正确建立缓存消息切定时检查(每隔2秒检查一次检查15次)。所以一条消息在最差的情况下会有2分多的重试时间以保证消息的可达。 因为重发的存在接受端偶尔会收到重复的两条消息这种情况下就需要接收端进行去重。一般的做法是每条消息都有自己唯一的message id(一般是uuid)。 文件上传优化 IM消息(包括SNS模块)内包含大量的文件上传的需求如何优化文件的上传就成了一个比较大的主题。常见有下面这些优化思路: 将上传流程提前:音频提供边录边传。朋友圈的图片进行预上传选择图片后用户一般会进行文本输入在这段时间内后台就可以默默将选好的图片进行上传。 提供闪电上传的方式:服务器根据MD5进行文件去重。 优化和上传服务器的连接(参考快速连接)提供连接重用的功能。 文件分块上传:因为移动网络丢包严重将文件分块上传可以使得一个分组包含合理数量的TCP包使得重试概率下降重试代价变小更容易上传到服务器。 在分包的前提下支持上传的pipeline避免不必要的网络等待时间。 支持断点续传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费空间的个人网站wordpress 微信接口

当使用模板模板参数时&#xff0c;我们可以将一个模板作为另一个模板的参数&#xff0c;从而实现更大的灵活性和重用性。模板模板参数的主要优势之一是它允许我们编写适用于多种模板类型的通用代码。 下面是一些关于模板模板参数的更多信息 template <template <typenam…

aspcms是网站什么漏洞惠阳区城市建设规划局网站

01 信息学奥赛路线比赛 来源:https://www.noi.cn/ 首先,信息学奥赛是升学最有帮助的一个赛事了,从CSP-J/P开始到NOIP再到最后的NOI,对科技特长生、高考加分都有较大裨益,但相对难度也是最大的。 小学可以参加的是CSP-J比赛,但是和初中生一起考试,不占优势,胜在早入门…

漯河市城市建设投资公司网站wordpress登录空白

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

网站和新媒体建设管理办法深圳全网推广正规专业公司

目录 1.绘制三维坐标轴的方法 2.绘制三维函数的样例1 3.绘制三维函数的样例2 4.绘制三维函数的样例3 5.绘制三维函数的样例4 6.绘制三维函数的样例5 1.绘制三维坐标轴的方法 #%% #1.绘制三维坐标轴的方法 from matplotlib import pyplot as plt from mpl_toolkits.mplot3…

成都网站设计制作工作室广州正规网站建设哪家好

作者&#xff1a;kw0ng开始通达OA上传到包含漏洞分析的文章已经有很多&#xff0c;本文重点分析&#xff0c;文件上传处决定路径信息是否回显的UPLOAD_MODE参数是怎么传递的。代码分析触发文件上传点位于/ispirit/im/upload.php中&#xff0c;服务端在接收文件信息的同时还需要…

免费网站开发框架wordpress活动召集插件

今年苹果手机发布的新机自发布以来就受到了热烈的追捧&#xff0c;销量一直都处于只增不减的趋势。苹果手机为何如此之火&#xff1f;除了本身自带的IOS系统之外&#xff0c;手机自带很多小技巧&#xff0c;你知道不&#xff1f;今天就来为大家介绍苹果手机中的三种截屏小技巧&…

织梦茶叶网站模板免费下载外贸网站使用攻略

四个问题&#xff1a; 一&#xff0c;Jarvis March算法借鉴了什么算法&#xff1f; 二&#xff0c;如何确定初始点 三&#xff0c;如何获取凸包的边&#xff1f; 四&#xff0c;Jarvis March算法的好处在哪里&#xff1f; 首先看第一个问题&#xff0c; 一&#xff0c;Jarvis …

河北省建设厅网站首页平台网站模板素材图片下载

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f516;系列专栏&#xff1a; C语言、Linux、Cpolar ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前…

做集装箱的网站建应用网站

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

第三方网站建设平台山东省住房和城乡建设厅政务服务

【SA8295P 源码分析】32 - QNX Ethernet Phy_Switch 驱动初始化 源码分析 一、使用现有的库配置 emac 和 phy_switch功能二、phy_switch 驱动初始化流程分析2.1 emac_mdio_register() 函数分析2.2 emac_mdio_callback() 函数分析系列文章汇总见:《【SA8295P 源码分析 (四)】网…

360网站推广官网怎么优化网站平台开发要注意什么问题

这是我的课程作业&#xff0c;用了 Eigen 库&#xff0c;最后的输出是 latex 的表格的一部分 具体内容就是 梯度下降法 精确线搜索&#xff08;单峰区间搜索 黄金分割&#xff09; 从书本的 Matlab 代码转译过来的其实&#xff0c;所以应该是一看就懂了 这里定义了两个测试…

如何使用框架来建设网站一份完整的营销策划书

ChatGPT的诞生使Excel公式变得过时。通过使用 ChatGPT 的代码解释器你可以做到&#xff1a; 分析数据创建图表 这就像用自然语言与电子表格交谈一样。我将向大家展示如何使用 ChatGPT 执行此操作并将结果导出为Excel格式&#xff1a; 作为示例&#xff0c;我将分析并创建美国…

单位网站建设服务区块链插件wordpress

clone() 方法是Object类中定义的一个方法&#xff0c;用于创建并返回一个对象的拷贝。但是&#xff0c;需要注意的是&#xff0c;clone() 方法是浅拷贝&#xff0c;即它只会复制对象的字段值&#xff0c;而不会复制对象引用的其他对象。 要使用clone()方法&#xff0c;需要满足…

网页设计与网站开发期末4399小游戏电脑版页面

一、评论爬取 以百度贴吧中“美团骑手吧”为例&#xff0c;对页面中的帖子评论进行爬取&#xff0c;并将结果以json的格式保存到本地中。 from lxml import etree import requests import json# 根据网页url获取评论 def GetComments(url):# 使用requests库发送GET请求&#…

网站建设软文模板外贸有哪些网站

本文将通过学生信息管理来介绍asp.net ajax的综合应用实例&#xff0c;包括“浏览”、“查询”、“添加”和“多选删除”功能&#xff0c;以及其它相关设计。 本示例源代码下载地址&#xff1a;http://down.51cto.com/data/220541 本示例中&#xff0c;程序架构参考Petshop&…

河北优化网站获客qq网站 内部搜索引擎

记 今天闲来无事&#xff0c;不想刷codeforces了&#xff0c;到洛谷提高组训练营找几道水题刷着玩玩&#xff08;虽然自己早已过了打OI的年纪&#xff09;&#xff5e; 简单博弈论专题 P1199 三国游戏 这么考虑&#xff0c;由于电脑总是不能让我搭配出当前能搭配出的最大的…

跨境浏览网站wordpress导航如何优化

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

常见的有利于seo的网站系统聊城手机网站建设服务

启动类去掉RibbonClient注解 10 50 100 1 权重优先调用 注意:启动类加RibbonClient注解 2 集群优先调用 3 元数据基于版本优先调用

建设银行网站安全分析自己做淘宝优惠券网站

[小学语文]计算机在小学写字教学中的运用之我见随着经济的快速发展&#xff0c;教育也出现了加快发展、加快改革的势态。随着教育技术的不断增加&#xff0c;教学设备得以不断更新&#xff0c;教学手段变得更加现代化。特别是我们火星小学&#xff0c;计算机辅助教学已成为学校…

wordpress 主题 打包陕西关键词优化推荐

文章目录 写在前面Panda3D程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于panda3d的迷宫中的小球游戏 所需环境 pythonpycharm或anacondapanda3d 下载地址 https://download.csdn.net/download/m0_68111267/88792121 Panda3D Panda3D是一种开放源代码…