如何用java实现HTTP长连接

如何用java实现HTTP长连接,第1张

tomcat9提供了一种叫webSocket的东西,可以实现这个,但是必须要使用tomcat9来支持

另外一个就是运用长轮询,就是前台给后台发一个请求, 然后后台一直不处理, 可以while循环或者sleep(1000), 每隔1秒去检查是否应该返回数据, 如果后台决定要刷新了, 就返回数据, 然后前台接收到返回数据后去刷新你要刷新的东西, 刷新完毕后如果需要, 再次发送这个请求。当然,为了不阻塞其它的ajax请求, 长轮询一般放在一个单独的iframe里

现编这个就是个多线程服务器,只要在client不释放连接,服务器端的run里边写while(TRUE)循环,那么就可以长期连接。

class ConnectionThread extends Thread{

Socket client;

int counter;

public ConnectionThread(Socket cl,int c){

client = cl;

counter= c;

}

@Override

public void run()

{

try{

String destIP=clientgetInetAddress()toString();

int destport =clientgetPort();

PrintStream outstream=new PrintStream(clientgetOutputStream());

DataInputStream instream=new DataInputStream(clientgetInputStream());

String inline=instreamreadLine();

}//try

catch(IOException e){Systemoutprintln(e);}

}//run

对于你这个需求,可以用当前比较热门的websocket来解决。

websocket可以实现服务端和客户端全双工通信,实时性非常好。

你可以自己搭建websocket服务,也可以使用第三方的websocket推送框架,比如GoEasy。

GoEasy目前支持java、php、python等服务端语言,同时也支持小程序、vue、uniapp等前端技术,使用起来还是非常方便的。

我的想法是这样的:首先建立一个showDatabasejava ,用于连接数据库,其源文件如下:

package stuTest;

import javasql;

public class showDatabase {

public Connection getConnection()

{

Connection conn;

try{

ClassforName("orggjtmmmysqlDriver")newInstance();

conn=DriverManagergetConnection("jdbc:","root","a123456");

//connsetAutoCommit(false);

}

catch(Exception e){throw new RuntimeException(e);}

return conn;

}

public void closeCon(Connection conn)

{

try{

if(conn!=null) connclose();

}

catch(SQLException e)

{

throw new RuntimeException(e);

}

}

public void rollback(Connection conn)

{

try

{

connrollback();

}

catch(SQLException e)

{

throw new RuntimeException(e);

}

}

}

长连接就是长连接。怎么可以转短连接。转了还叫”长连接“吗?

通常短连接是指,连接,登陆,数据库事务处理,连接关闭。

长连接是指。连接登陆,数据库事务处理,继续处理,如果断了再重新连接,直到用户主动关闭,或者是程序退出。

使用session机制,将参数动态的放在url后或使用cookies保存,将信息保存在url后或url链接后面。从服务器上再保存一份,就可以了。不过实现起来太复杂了。 暂不做介绍

现在有一个简单的办法就是可以在发送的消息前面加入一个随机值,当有新的请求到来的时候创建一个,然后保存起来。当客户端接收到这个随机值的时候,再回信息的时候将这个消息一并发给服务器。服务器可以这样判断,如果没有这个消息值的话就认为是一个新的用户,并为其创建一个消息。如果带有这消息的话,就是已经链接过的。这样就可以保持链接状态了。

你现在遇到了连接不释放的问题?

在每一次openconnection后。你拥有 connection、Resultset、Statement的对象

这三个东西需要依次释放 不然连接将持续开启。

依次执行

rsclose();

stmtclose();

connclose();

才能释放当前连接。

以上就是关于如何用java实现HTTP长连接全部的内容,包括:如何用java实现HTTP长连接、Java Socket 长连接怎么实现、java 实现长连接接受信息,发送信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9406419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存