问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现java http长连接推送数据

发布网友 发布时间:2022-04-26 09:58

我来回答

2个回答

热心网友 时间:2022-04-23 12:57

Feign在默认情况下使用的是JDK原生的URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用HTTP的persistence connection 。我们可以用Apache的HTTP Client替换Feign原始的http client, 从而获取连接池、超时时间等与性能息息相关的控制能力。Spring Cloud从Brixtion.SR5版本开始支持这种替换,首先在项目中声明Apache HTTP Client和feign-httpclient依赖

热心网友 时间:2022-04-23 15:50

通过轮询来实现长连接
轮询:隔一段时间访问服务器,服务器不管有没有新消息都立刻返回。
http长连接实现代码:
客户端:
package houlei.csdn.keepalive;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.ConcurrentHashMap;

/**
*C/S架构的客户端对象,持有该对象,可以随时向服务端发送消息。
* <p>
* 创建时间:2010-7-18 上午12:17:25
* @author HouLei
* @since 1.0
*/
public class 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();
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();
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 java的自动发送心跳包究竟是该写在服务器还是客户端 SO_KEEPALIVE是java中哪个类的呀,是什么意思呀 大理州有哪些旅游景点 云南大理有哪些好耍的地方 云南大理有哪些好玩的地方 云南大理有哪些好玩的? 大理宾川鸡足山景区的景区概述 云南大理有哪些景点 云南大理南涧旅游景点和宾川哪个好玩? 大理宾川有哪些旅游景点 提子酒跟红酒有什么区别么? 葡萄蒸馏酒和红提葡萄蒸馏酒有什么区别? 酿酒使用葡萄,食用葡萄和提子到底有什么区别 人教版初二物理下预习 提子酒和葡萄酒一样吗? 人教版八年级下册物理期中复习提纲 提子是葡萄吗?可不可以用它酿葡萄酒? 初二物理人教版下册一至八章所有计算公式和知识点. 求计算公式的整理.各条公式的原型及变形公式. 酿酒葡萄,食用葡萄和提子到底有什么区别 帮忙总结一下八年级人教版上下册物理知识点 java 服务端怎么释放http连接 如何判断websocket断开 java.net.SocketException: Software caused connection abort: recv failed Java netty的option(ChannelOption.SO_BACKLOG, backLog)什么意思 apache mina 是长连接还是短连接 如何整合Apache与Tomcat 微信小程序怎么改变picker-view的背景颜色 微信小程序的picker组件不能使用对象怎么办 微信小程序picker只能是数组吗 微信小程序picker有没有触发 小程序怎么判断picker mode region 小程序商城列表的数据是绑定在js 怎么实现下拉? “索取销售款凭据”是指什么? 求助,取得索取营业收入款项凭证是什么意思 有个问题求教:销售货物或应税劳务的纳税义务的发生时间为收讫销售款项或取得索取销售款项凭据的当天。 如何确定取得索取销售款项凭据的“当天”? 销售款项凭据是指什么 房地产开发企业自行开发房地产的会计处理有哪些 房地产企业预售阶段取得的成本票据企业所得税汇算吋如何处理? 老师您好,(一)采取直接收款方式销售货物,不论货物是否发出。均为收到销售额或取得索取销售额的凭据,