全网最通俗易懂的【短连接】入门

前言

只有光头才能变强。git

文本已收录至个人GitHub仓库,欢迎Star:github.com/ZhongFuChen…github

最近接了一个需求,涉及到了短连接的相关的知识,因而去查阅了相关的资料,在这里给你们整理分享一下。算法

1、短连接介绍

举个例子,如今个人GitHub的地址是这个:https://github.com/ZhongFuCheng3y/3y (36个字符)浏览器

我经过百度的短连接服务能够将上面的地址转成https://dwz.cn/LwlrfG4j(23个字符)服务器

转短连接

那我为何要将原有的URL转成较短的连接呢?好比咱们发短信提醒用户去XXX,XXX有优惠活动,在文案上每每会带有一个连接进行跳转,方便用户快速去到对应的活动落地页。学习

而短信的发送是须要成本的,短信的成本主要有两方面组成:编码

  1. 发送的人数(发的人越多,天然短信的花费就越大,这个我就不解释了)
  2. 短信发送的字数(好比,文案总字数超过70个字,那就算两条短信计费,超过140个字就算三条短信计费)

因此在发送短信给用户时:要么就投放更加精准优质的用户,以便控制好发送的数量,要么就尽量控制文案的字数。url

显然,若是在短信上配上普通的URL,那真正的文案可写的字数就没多少了。因而咱们能够发现,各大公司的短信推送的URL都是短连接.net

短连接案例之一

好比在一些平台发布消息时会限制字数,若是咱们的发的URL过长就很容易就被限制住了:code

限制字数

使用短连接的好处:短、字符少、美观、便于发布、传播

2、短连接它是怎么干的呢?

咱们先回到生成好的短链上https://dwz.cn/LwlrfG4j

虽然这个连接看起来有点奇怪,但他终究仍是一个连接,从URL的特征咱们能够分出:

  • dwz.cn是域名
  • LwlrfG4j是参数

域名

咱们在浏览器请求一下短连接看看是什么状况:

302跳转

短连接的原理其实就是:

  • 将长连接经过必定的手段生成一个短连接
  • 访问短连接时实际访问的是短连接服务器,而后根据短连接的参数找回对应的长连接
  • 重定向跳转

大体原理图

2.1 核心的要解决的问题

经过上面的分析咱们能够知道的是,咱们实际核心要作的是怎么从LwlrfG4j相似这样的参数找到对应的完整URL:https://github.com/ZhongFuCheng3y/3y

脑子第一时间想到的是:能不能经过一个压缩算法将https://github.com/ZhongFuCheng3y/3y压缩更小的字符?

显然,不能,压缩算法大多数都是针对大文本才奏效,自己的URL也不见得有多大...压缩出来确定比原来的URL还大。

脑子第二时间想到的是:能不能用Hash算法?仍是不能,用Hash存在哈希碰撞的问题

  • 什么是哈希碰撞?两个不相同的字符串(值)进行Hash操做后,获得的哈希值相同。
  • 这就意味着,两个彻底不一样的长链获得的哈希值如出一辙,而个人短链是依赖哈希值去找到长链的(此时一个短链对应多个长链,这不合理)。

脑子第三时间想到的是?脑子想不到了

如今业内用得比较多的是发号器(ID自增)+62进制编码

  • 好比,我将https://github.com/ZhongFuCheng3y/3y看做是10000,而后将10000进行62进制编码获得的结果是:2Bi

那个人短链URL就能够弄成https://3y.cn/2Bi,其中3y.cn是域名,2Bi是通过62进制转换后的参数。

为何要用62进制转换?64进制转换却是听得多了

  • 62进制转换是由于62进制转换后只含数字+小写+大写字母。而64进制转换会含有/,+这样的符号(不符合正常URL的字符)
  • 10进制转62进制能够缩短字符,若是咱们要6位字符的话,已经有560亿个组合了。

6位字符

总结:

  • ID自增后,转成62进制,在DB保存映射关系,生成短连接

短连接过程

3、短信的连接直接跳转到APP

如下内容来源:sq.163yun.com/blog/articl… ,做者:西西吹雪

综合起来就是:

  • 经过 Deep Links(iOS 则是Universal Links),能够实现点击短信连接直接唤起 App;
  • 若是系统由于各类缘由不支持 Deep Links,备选方案是 intent filter,不过会出弹框让用户选择用哪一个 App 打开连接;
  • 若是用户没有选择咱们的 App 而是选择了浏览器打开,则经过 自定义 scheme 尝试唤起 App;
  • 因为技术和成本问题,咱们忽略不支持 自定义 scheme 的浏览器。

短信连接唤醒APP

最后

这篇文章主要是简单了解一下短连接的相关知识,一个完备的短链服务确定还要考虑更多的事,这里我就不展开了(毕竟我也没真正写过,能够在下方的连接继续学习)~

更多资料查阅:

本已收录至个人GitHub精选文章,欢迎Stargithub.com/ZhongFuChen…

乐于输出干货的Java技术公众号:Java3y。公众号内有300多篇原创技术文章、海量视频资源、精美脑图,关注便可获取!

转发到朋友圈是对我最大的支持!

很是感谢人才们能看到这里,若是这个文章写得还不错,以为「三歪」我有点东西的话 求点赞 求关注️ 求分享👥 求留言💬 对暖男我来讲真的 很是有用!!!

创做不易,各位的支持和承认,就是我创做的最大动力,咱们下篇文章见!

相关文章
相关标签/搜索