精华内容
下载资源
问答
  • 什么是长连接?HTTP1.1协议规定了web地址默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),所以在web服务端获取到的链接都只能是原始长连接。什么是短连接?短连接(short-url),顾名思义就是在...

    什么是长连接?

    HTTP1.1协议规定了web地址默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),所以在web服务端获取到的链接都只能是原始长连接。

    什么是短连接?

    短连接(short-url),顾名思义就是在形式上比较短的链接,可能很多朋友都已经不再陌生,特别是在微博应用中十分普遍,比如,当我们在腾讯、新浪微博发微博时有时发很长的网址连接,但由于微博只限制140个字,所以微博就自动把您发的长连接给转换成短连接了。无可否认在微博和手机短信提醒等限制字数的地方来使用短网址,的确是一个不错的方案。

    长连接和短连接转换接口

    接口使用说明:

    1、在线使用

    将API地址中 "http://www.baidu.com"的部分换成自己的长连接,然后复制完整地址前往浏览器中粘贴打开就能生成了。(简而言之就是更换url后面的链接)

    2、请求接口

    如果你的量比较大,一条一条转换太麻烦了,需要批量生成的话,可以将API接口对接到程序中请求生成,请求示例如下。

    PHP请求示例:

    $url = 'http://www.baidu.com';

    $api_url = 'http://lnurl.cn/sina/short-api?url_long=http://www.baidu.com;

    $short_url = file_get_contents($api_url);

    echo $short_url;

    Java请求示例:

    public static void main(String path[]) throws Exception{

    URL u = new URL("http://lnurl.cn/sina/short-api?url_long=http://www.baidu.com");

    InputStream in = u.openStream();

    ByteArrayOutputStream out = new ByteArrayOutputStream();

    try {

    byte buf[] = new byte[1024];

    int read = 0;

    while ((read = in .read(buf)) > 0) {

    out.write(buf, 0, read);

    }

    } finally {

    if ( in != null) {

    in .close();

    }

    }

    byte b[] = out.toByteArray();

    System.out.println(new String(b, "utf-8"));

    }

    Python请求示例:

    import urllib, urllib2, sys

    host = 'http://lnurl.cn'

    path = '/sina/short-api'

    method = 'GET'

    querys = 'url_long=http%3A%2F%2Fwww.baidu.com'

    bodys = {}

    url = host + path + '?' + querys

    request = urllib2.Request(url)

    response = urllib2.urlopen(request)

    content = response.read()

    if (content):

    print(content)

    注意事项:

    1、调用API接口时,只需将 “http://www.baidu.com”换成需要缩短的长链接即可。

    2、接口支持链接中带参数,但要注意的是当链接中出现 & 符号时,请用 %26 代替(或者使用url编码),否则参数可能会丢失。

    3、更换链接时,必须要以http(s)://开头,否则可能会导致短网址生成失败或者生成的短网址无法跳转访问原网站。

    常见问题:

    1、长链接转换后,为什么结尾的参数丢失了?

    答:因为长链接中含有特殊字符,需要将url编码后再使用接口生成。

    2、接口没有返回结果,是什么情况?

    答:有些时候接口返回数据会有延迟,超时未返回即生成失败,也就不会返回结果;或者是因为原链接被封了。

    3、生成的短连接有效期是多久?有没有访问次数限制?

    答:生成的短连接(t.cn&url.cn)是永久有效的,没有点击次数限制,可以放心使用。

    算法原理

    算法一

    1) 将长网址md5生成32位签名串,分为4段, 每段1个字节(即8位);

    2) 对这四段循环处理, 取4个字节(32位), 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;

    3) 这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;

    4) 总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;

    算法二

    把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。

    把长网址存入数据库,取返回的id,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是bbb,同理 ID为2时,字符串组合为bba,依次类推,直至到达62种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。

    展开全文
  • 什么是长连接?HTTP1.1协议规定了web地址默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),所以在web服务端获取到的链接都只能是原始长连接。什么是短连接?短连接(short-url),顾名思义就是在...

    什么是长连接?

    HTTP1.1协议规定了web地址默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),所以在web服务端获取到的链接都只能是原始长连接。

    什么是短连接?

    短连接(short-url),顾名思义就是在形式上比较短的链接,可能很多朋友都已经不再陌生,特别是在微博应用中十分普遍,比如,当我们在腾讯、新浪微博发微博时有时发很长的网址连接,但由于微博只限制140个字,所以微博就自动把您发的长连接给转换成短连接了。无可否认在微博和手机短信提醒等限制字数的地方来使用短网址,的确是一个不错的方案。

    长连接和短连接转换接口

    接口获取流程

    734a8a66c0f8

    2、进入页面后,点击“立即开通”获取接口授权key

    734a8a66c0f8

    3、注册账后获取接口key

    734a8a66c0f8

    4、获取接口

    734a8a66c0f8

    接口使用说明:

    1、在线使用

    将API地址中 "http://www.baidu.com"的部分换成自己的长连接,然后复制完整地址前往浏览器中粘贴打开就能生成了。(简而言之就是更换url后面的链接)

    2、请求接口

    如果你的量比较大,一条一条转换太麻烦了,需要批量生成的话,可以将API接口对接到程序中请求生成,请求示例如下。

    PHP请求示例:

    $url = 'http://www.baidu.com';

    $api_url = 'http://lnurl.cn/sina/short-api?url_long=http://www.baidu.com;

    $short_url = file_get_contents($api_url);

    echo $short_url;

    Java请求示例:

    public static void main(String path[]) throws Exception {

    URL u = new URL("http://lnurl.cn/sina/short-api?url_long=http://www.baidu.com");

    InputStream in = u.openStream();

    ByteArrayOutputStream out = new ByteArrayOutputStream();

    try {

    byte buf[] = new byte[1024];

    int read = 0;

    while ((read = in .read(buf)) > 0) {

    out.write(buf, 0, read);

    }

    } finally {

    if ( in != null) {

    in .close();

    }

    }

    byte b[] = out.toByteArray();

    System.out.println(new String(b, "utf-8"));

    }

    Python请求示例:

    import urllib, urllib2, sys

    host = 'http://lnurl.cn'

    path = '/sina/short-api'

    method = 'GET'

    querys = 'url_long=http%3A%2F%2Fwww.baidu.com'

    bodys = {}

    url = host + path + '?' + querys

    request = urllib2.Request(url)

    response = urllib2.urlopen(request)

    content = response.read()

    if (content):

    print(content)

    注意事项:

    1、调用API接口时,只需将 “http://www.baidu.com”换成需要缩短的长链接即可。

    2、接口支持链接中带参数,但要注意的是当链接中出现 & 符号时,请用 %26 代替(或者使用url编码),否则参数可能会丢失。

    3、更换链接时,必须要以http(s)://开头,否则可能会导致短网址生成失败或者生成的短网址无法跳转访问原网站。

    常见问题:

    1、长链接转换后,为什么结尾的参数丢失了?

    答:因为长链接中含有特殊字符,需要将url编码后再使用接口生成。

    2、接口没有返回结果,是什么情况?

    答:有些时候接口返回数据会有延迟,超时未返回即生成失败,也就不会返回结果;或者是因为原链接被封了。

    3、生成的短连接有效期是多久?有没有访问次数限制?

    答:生成的短连接(t.cn&url.cn)是永久有效的,没有点击次数限制,可以放心使用。

    算法原理

    算法一

    1) 将长网址md5生成32位签名串,分为4段, 每段1个字节(即8位);

    2) 对这四段循环处理, 取4个字节(32位), 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;

    3) 这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;

    4) 总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;

    算法二

    把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。

    把长网址存入数据库,取返回的id,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是bbb,同理 ID为2时,字符串组合为bba,依次类推,直至到达62种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。

    展开全文
  • java长连接和短连接

    2019-03-04 12:36:00
    1、将长连接修改为短连接 2、请求结束后主动断开连接 HTTP/1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接的改进型设计取代了它。持久连接的目的与keep-alive连接的目的相同,但是工作...

    问题:最近上线的产品一个接口,频繁出现ConnectionPoolTimeoutException错误,排查后原因是存在未正常断开的连接,导致连接route耗尽

    解决方案:

    1、将长连接修改为短连接

    2、请求结束后主动断开连接
    HTTP/1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接的改进型设计取代了它。持久连接的目的与keep-alive连接的目的相同,但是工作机制更优些。HTTP/1.1就吃连接在默认情况下是激活的,除非特别指明,否则HTTP/1.1假定所有的连接都是持久的,要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显示地添加一个Connection:close首部。引用自:“https://www.cnblogs.com/chengdabelief/p/6686603.html”
    HttpPost post = new HttpPost();
    try {  
               // post.setURI(URI.create(targetUrl));
                post.setHeader(HttpHeaders.CONNECTION, "close");
          //****其他业务逻辑代码
        
    } catch (HttpException e) {  
      // TODO Auto-generated catch block  
      e.printStackTrace();  
    } catch (IOException e) {  
      // TODO Auto-generated catch block  
      e.printStackTrace();  
    }finally{  
      post.releaseConnection();     
    }  

    注意:

    post.setHeader(HttpHeaders.CONNECTION, "close"); 这一行确保连接释放后能够被关闭,从而解决等待连接池分配连接超时的问题

    转载于:https://www.cnblogs.com/raychou1995/p/10469536.html

    展开全文
  • Client {/*** 处理服务端发回的对象,可实现该接口。*/public static interface ObjectAction{void doAction(Object obj,Client client);}public static final class DefaultObjectAction implements ObjectAction{...

    Client {

    /**

    * 处理服务端发回的对象,可实现该接口。

    */

    public static interface ObjectAction{

    void doAction(Object obj,Client client);

    }

    public static final class DefaultObjectAction implements ObjectAction{

    public void doAction(Object obj,Client client) {

    System.out.println("处理:\t"+obj.toString());

    }

    }

    public static void main(String[] args) throws UnknownHostException, IOException {

    String serverIp = "127.0.0.1";

    int port = 65432;

    Client client = new Client(serverIp,port);

    client.start();

    }

    private String serverIp;

    private int port;

    private Socket socket;

    private boolean running=false; //连接状态

    private long lastSendTime; //最后一次发送数据的时间

    //用于保存接收消息对象类型及该类型消息处理的对象

    private ConcurrentHashMap<Class, ObjectAction> actionMapping = new ConcurrentHashMap<Class,ObjectAction>();

    public Client(String serverIp, int port) {

    this.serverIp=serverIp;

    this.port=port;

    }

    public void start() throws UnknownHostException, IOException {

    if(running)return;

    socket = new Socket(serverIp,port);

    System.out.println("本地端口:"+socket.getLocalPort());

    lastSendTime=System.currentTimeMillis();

    running=true;

    new Thread(new KeepAliveWatchDog()).start(); //保持长连接的线程,每隔2秒项服务器发一个一个保持连接的心跳消息

    new Thread(new ReceiveWatchDog()).start(); //接受消息的线程,处理消息

    }

    public void stop(){

    if(running)running=false;

    }

    /**

    * 添加接收对象的处理对象。

    * @param cls 待处理的对象,其所属的类。

    * @param action 处理过程对象。

    */

    public void addActionMap(Class<Object> cls,ObjectAction action){

    actionMapping.put(cls, action);

    }

    public void sendObject(Object obj) throws IOException {

    ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

    oos.writeObject(obj);

    System.out.println("发送:\t"+obj);

    oos.flush();

    }

    class KeepAliveWatchDog implements Runnable{

    long checkDelay = 10;

    long keepAliveDelay = 2000;

    public void run() {

    while(running){

    if(System.currentTimeMillis()-lastSendTime>keepAliveDelay){

    try {

    Client.this.sendObject(new KeepAlive());

    } catch (IOException e) {

    e.printStackTrace();

    Client.this.stop();

    }

    lastSendTime = System.currentTimeMillis();

    }else{

    try {

    Thread.sleep(checkDelay);

    } catch (InterruptedException e) {

    e.printStackTrace();

    Client.this.stop();

    }

    }

    }

    }

    }

    class ReceiveWatchDog implements Runnable{

    public void run() {

    while(running){

    try {

    InputStream in = socket.getInputStream();

    if(in.available()>0){

    ObjectInputStream ois = new ObjectInputStream(in);

    Object obj = ois.readObject();

    System.out.println("接收:\t"+obj);

    ObjectAction oa = actionMapping.get(obj.getClass());

    oa = oa==null?new DefaultObjectAction():oa;

    oa.doAction(obj, Client.this);

    }else{

    Thread.sleep(10);

    }

    } catch (Exception e) {

    e.printStackTrace();

    Client.this.stop();

    }

    }

    }

    }

    }

    展开全文
  • public classServer {/*** 要处理客户端发来的对象,并返回一个对象,可实现该接口。*/public interfaceObjectAction{Object doAction(Object rev, Server server);}public static final class DefaultObjectAction ...
  • 由于业务需要,有一些实时性要求高的接口从无状态的 HTTP 连接切换到了长连接, 所以最近基于 Apache mina 来实现了长连接.主要说明一下 Android 客户端的实现.依赖对于 Android 客户端来说, 不需要引入太多的包.首先...
  • 数据库连接池池参数(所有池参数都有默认值):初始大小:10个最小空闲连接数:3个...实现的接口连接池必须实现:javax.sql.DataSource接口连接池返回的Connection对象,它的close()方法与众不同!调用它的close(...
  • Java远程方法调用,即Java RMI(Java Remote Method Invocation),一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境...
  • Tomcat是如何实现长连接的?要明白HTTP长连接,得先明白Socket连接什么是Socket?百度一下,根本看不懂要理解Socket,得先理解TCPTCP是传输层协议,有Linux、Windows等操作系统实现Socket是对TCP协议抽象出来的上层...
  • 一、前言最近公司在预研设备app端与服务端的交互方案,主要方案有服务端和app端通过阿里iot套件实现消息的...虽然上面的一些成熟方案肯定更利于上生产环境,但它们通讯基础也都是socket长连接,所以本人主要是预研了...
  • Tomcat是如何实现长连接的?要明白HTTP长连接,得先明白Socket连接什么是Socket?百度一下,根本看不懂要理解Socket,得先理解TCPTCP是传输层协议,有Linux、Windows等操作系统实现Socket是对TCP协议抽象出来的上层...
  • 有时候,我们不想采用很的url链接,主要的一些原因: URL太占显示空间、难于输入,转成二维码点点小,难于识别的URL提供的信息太多,不利于信息安全,甚至容易造成倒库其他理由......例如强迫症 今天的...
  • 一、Java基础面向对象1、面向对象和面向过程的区别2、四个基本特性3、重载和重写4、构造器Constructor是否可被override5、访问控制符6、抽象类和接口的区别语言特性1、String和StringBuffer、StringBuilder的区别2、...
  • java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。java.net 包中提供了两种常见的网络协议的支持:TCP:TCP 是传输控制...
  • 一、前言 最近公司在预研设备app端与服务端的交互方案,主要方案有: 服务端和app端通过阿里iot套件实现消息的... 服务端与app通过原生socket长连接交互。 虽然上面的一些成熟方案肯定更利于上生产环境,但它...
  • 一、前言最近公司在预研设备app端与服务端的交互方案,主要方案有服务端和app端通过阿里iot套件实现消息的...虽然上面的一些成熟方案肯定更利于上生产环境,但它们通讯基础也都是socket长连接,所以本人主要是预研了...
  • public classServer {/*** 要处理客户端发来的对象,并返回一个对象,可实现该接口。*/public interfaceObjectAction{Object doAction(Object rev, Server server);}public static final class DefaultObjectAction ...
  • 编写标准的数据源(规范)Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!常见的第三方连接池如下:C3P0是一个...
  • Netty实现长连接服务端跟客户端,使用单独的业务线程池,并支持心跳背景前阵子完成过一个系统,对接某交易所接口,通过长连接收发交易报文,并由应用程序发送心跳维持长连接。受限于开发平台的限制,只能采用传统的...
  • java数据库连接

    2020-12-18 16:56:11
    Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池! 常见的第三方连接池如下: C3P0是一个开源的JDBC连接池,它...
  • 1:interface :定义接口接口用于 模块与模块之间的连接 或者系统与系统间的连接2:软件系统UI层:程序的界面,主要为用户提供交互和操作--查看,输入,点击,等。业务逻辑层:进行复杂的业务处理 和数据处理--API ...
  • 这个场景下就需要创建一个长连接来进行解决此问题,前端与后台进行连接后,不仅前端可以实时与后端进行通信,后端也可以主动将数据推送至前端,以下是实现逻辑,分为JAVA和JS两部分。 1.JAVA新建WebSocket类,并先...
  • Java-Socket服务端和多个客户端长连接

    千次阅读 2019-04-10 11:23:25
    socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 短...
  • 作者:DavidDing来源:https://zhuanlan.zhihu.com/p/56135195一、前言最近公司在预研设备app端与服务端的交互方案,主要方案有:服务端和app端通过阿里iot套件实现消息的...服务端与app通过原生socket长连接交互...
  • 内核小王子觉得可以的话欢迎关注场景:公司对外网关对很多外部商户开放,运行多年一直正常,昨天某一个客户调用我们接口的时候频繁报connectiontimeout,异常如下:该异常来自于httpclient,原因是创建连接超时,也...
  • 接口API http://suo.im/ ... import java.util.HashMap; import java.util.Map;... * TODO(工具类:借助第三方,将长连接转换为短连接) * <p> * */ public class ShortUrlUtil { // http...
  • 本文价值在于包扫描的原理探究和实现一、背景项目开发中,使用Netty做服务端,保持长连接与客户端(agent)通讯。Netty服务端需要根据不同消息类型,加载对应的Processer(消息处理器)对消息进行处理。问题就出现了,...
  • 需求背景这个需求的出现来源于我们的某业务接口优化中遇到的一个瓶颈:初期接口在调用php提供的第三方接口时,遇到访问高峰的情况会出现该接口timeout的情况(如下图 平常时接口时延75ms,高峰时到达368ms ),同时...
  • 要用websocket去定时获取数据,要获取websocket实时返回的值来对后续的业务进行处理,当时我还觉得只是个简单的websocket链接获取数据而已,然而在用websocket连接之后发现返回的http状态码是301,在跟接口开发人员沟通...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 483
精华内容 193
关键字:

java长连接接口

java 订阅