论坛首页 综合技术论坛

微薄短域名原理及作用

浏览 28129 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (13) :: 隐藏帖 (11)
作者 正文
   发表时间:2011-03-29  
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。
0 请登录后投票
   发表时间:2011-03-29   最后修改:2011-03-29
之前刚好看过,分享一下。

def saveLongUrl(String longUrl)
  id = NoSqlDb.get("url:id")
  id++ #Id is hex value. e.g. FF = 256,
  NoSqlDb.set("url:" + id + ":id, longUrl)
  return id
end

申请一个域名 douniwuan.fm

假设上面返回的id为ff
http://douniwuan.fm/ff


调用下面的函数
def onclickUrlId(String id)
  String url = NoSqlDb.get("url:" + id + ":id, longUrl)
  redirectTo(url)
end

下一次保存的短址为
http://douniwuan.fm/100
http://douniwuan.fm/101
...
http://douniwuan.fm/fff


也可以直接在页面生成
<a href="http://www.google.com">http://douniwuan.fm/ff</a>
但这样就不能记录用户行为了。


0 请登录后投票
   发表时间:2011-03-29  
其实我觉得最简单的时间方式就是买下t.cn这个域名,,然后在里面做一个过滤器,对后面的url进行过滤,然后在该服务器上用一个文件村下t.cn后面的url跟真实url的对应关系,,
0 请登录后投票
   发表时间:2011-03-29  
楼主显然对这个问题没有怎么研究
0 请登录后投票
   发表时间:2011-03-29  
研究过类似的一个高效的实现,当然思路非我原创,也是网上前辈们的经验

实现方式是nginx+tt+tc做转发

具体原理是nginx代理到tt的服务端口

稍微修改一下tt的源码,将tt的http协议返回的东西稍作修改, 原来返回value的地方修改为返回302的http报文,把tc里拿到的value作为location回送给浏览器,重新编译后启动TT,直接访问即可。
TC里KEY为短地址,VALUE为URL

url要有长期性,memcached的特性不适合干这事。

tc=tokyo cabinet
tt=Tokyo Tyrant

LZ有兴趣可以研究一下
0 请登录后投票
   发表时间:2011-03-29  
denger 写道
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。


应该不仅仅是140限制,可能也是为了避免同样的链接被大量用户引用,缩短链接长度以便节省存储空间,微薄的用户关注的都是一些热点话题,用户发的不同微薄中出现同样的链接是比较常见的。
0 请登录后投票
   发表时间:2011-03-30  
weiqiang.yang 写道
有不少开源实现的
比如
http://www.2expertsdesign.com/php/free-url-shortening-scripts

http://yourls.org/
应该不会太复杂,有兴趣可以下来研究研究


恩恩。3Q。有空研究一下!
0 请登录后投票
   发表时间:2011-03-30  
denger 写道
風一樣的男子 写道
主要是因为微薄140限制,如果没限制,谁那么无聊搞个映射?

如果只是字数问题的话,照我说直接 <a href="http://bjwb.bjd.com.cn/html/2011-03/23/content_382746.htm" target="_blank"><url></a>, 象这样统一处理就 OK了,还搞什么短域名。


你这个存储起来需要更大的空间。连接太长啦。

我提到的这块东西。估计会更复杂。在存储里不会存html标签。例如A标签!
0 请登录后投票
   发表时间:2011-03-30  
dmhorse 写道
之前刚好看过,分享一下。

def saveLongUrl(String longUrl)
  id = NoSqlDb.get("url:id")
  id++ #Id is hex value. e.g. FF = 256,
  NoSqlDb.set("url:" + id + ":id, longUrl)
  return id
end

申请一个域名 douniwuan.fm

假设上面返回的id为ff
http://douniwuan.fm/ff


调用下面的函数
def onclickUrlId(String id)
  String url = NoSqlDb.get("url:" + id + ":id, longUrl)
  redirectTo(url)
end

下一次保存的短址为
http://douniwuan.fm/100
http://douniwuan.fm/101
...
http://douniwuan.fm/fff


也可以直接在页面生成
<a href="http://www.google.com">http://douniwuan.fm/ff</a>
但这样就不能记录用户行为了。





恩恩。赞!支持!
0 请登录后投票
   发表时间:2011-03-30  
httpclient_bd 写道
研究过类似的一个高效的实现,当然思路非我原创,也是网上前辈们的经验

实现方式是nginx+tt+tc做转发

具体原理是nginx代理到tt的服务端口

稍微修改一下tt的源码,将tt的http协议返回的东西稍作修改, 原来返回value的地方修改为返回302的http报文,把tc里拿到的value作为location回送给浏览器,重新编译后启动TT,直接访问即可。
TC里KEY为短地址,VALUE为URL

url要有长期性,memcached的特性不适合干这事。

tc=tokyo cabinet
tt=Tokyo Tyrant

LZ有兴趣可以研究一下


没太看懂。稍后补补可。学习一下!
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics