java 实现长连接接受信息,发送信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 实现长连接接受信息,发送信息相关的知识,希望对你有一定的参考价值。

大家好!
目前小弟在做一个连接远程控制台读取返回信息输出页面的小程序(可以称之为游戏服务端控制台那种),
连接控制台信息: 远程端口、ip、密码

描述:

1.websocket
1.1这种js里面直接用ws协议连接ws://localhost:本地端口/"+ip+"/"+port+"/"+passwd这样连接会握手失败,由于没去看过源码,暂且判定为是因为(连接控制台第一件事是输入密码登陆这个我不知道他会不会自动发送密码先登录然后接受信息)
1.2,由于上一种方法行不通,那我就用ws协议请求java项目里面的websocket,在用socket连接远程,这样连接控制台然后手动发送密码,在读取控制台一直返回的信息,但是这里遇到一个问题,服务端是一直返回信息的,代码里面就得用循环读取,然后在里面吧信息推送至前台页面显示,虽然能正常发送命令接受信息,
1.3,用telnet客户端,一样是因为阻塞到问题2

问题:
由于连接是需要长连接的
1.会偶尔不定时没接受到消息就丢失连接,(这个定时发送心跳包貌似是一种解决办法)
2.我用的是readLine读取数据,这里就会阻塞,页面需要发送命令(同一个流发送)的话后台无法接收到,会一直阻塞到循环读取哪里

希望有想法的各位给点建议或思路或方向。

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

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

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

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

参考技术A tomcat9提供了一种叫webSocket的东西,可以实现这个,但是必须要使用tomcat9来支持另外一个就是运用长轮询,就是前台给后台发一个请求, 然后后台一直不处理, 可以while循环或者sleep(1000), 每隔1秒去检查是否应该返回数据, 如果后台决定要刷新了, 就返回数据, 然后前台接收到返回数据后去刷新你要刷新的东西, 刷新完毕后如果需要, 再次发送这个请求。当然,为了不阻塞其它的ajax请求, 长轮询一般放在一个单独的iframe里 参考技术B 这个肯定是有很多现成的实现,因为现在很多持续集成的服务器都是在页面持续输出控制台信息的,建议你找一下类似的开源实现来看(gitlab算一个,当然这是go写的但思路都差不多)

JSch 这个库你可以先试试,先把本地的控制台测试好了,再测试远端的

以上是关于java 实现长连接接受信息,发送信息的主要内容,如果未能解决你的问题,请参考以下文章

F4 workerman 长连接绑定用户id实现一对一客服聊天

JAVA实现心跳检测长连接

Java中netty怎样主动推送信息。

如何用php程序主动向html页面发送信息?

请教怎么实现异步发送邮件

java客户端与C#服务端进行socket通讯 客户端发送文本信息服务端显示