java,comet
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java comet是什么,让我们一起了解一下?
comet是基于HTTP长连接的“服务器推”技术,是一种新的Web应用架构。基于Java的成熟的服务器推送框架有 DWR ,另外comet的应用主要体现在股票系统和实时通讯。
Comet有以下两种实现方式:
1、长轮询(long-polling):用JS发送Ajax请求,但是服务器不会立马响应,直到服务器有消息给客户端时再响应,响应完成后连接关闭,客户端立即再次发送请求,等待响应。
2、流(streaming):和上面long-polling不同的是,服务器发完消息后,不会关闭连接,而是保持HTTP连接继续等待下一条消息。这样客户端不用每次收到消息连接关闭后再次请求。
这种方式的原理是HTTP协议响应头的一个Header:Transfer-Encoding: chunked。普通的HTTP响应头中会有Content-Length表示整个响应的字节大小,浏览器接收到所有的响应数据才会加载内容。而设置Transfer-Encoding: chunked后表示响应大小不固定,浏览器接收到一点响应数据就加载一点。基于流的Comet后台实现是一样的,但是前端会有几种不同的方式:iframe流和针对FireFox的方式。
那么实际操作中,Comet是如何实现的?(以长轮询为例)
前端页面:
<!DOCTYPE HTML><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><script type="text/javascript">function getMsg() {// 请求地址是CometServlet对应的URL,加上一个随机值参数防止缓存问题var url = "comet" + "?t="+Math.random();var request = new XMLHttpRequest();request.onreadystatechange = function() {if (request.readyState == 4) {if (request.status == 200) {if (request.responseText) {// 追加到HTML中document.body.innerHTML += request.responseText;}}// Ajax完成后,再次Ajax请求getMsg();}};request.open("GET", url, true);request.send();}window.onload = getMsg;</script></head><body></body></html>
后台Servlet:
public class CometServlet extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 这里用Thread.sleep来模拟comet,相当于每隔5秒服务器向客户端推送一条消息try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}PrintWriter out = response.getWriter();out.println("helloworld<br>");}
在浏览器中打开html页面,可以看到每隔5秒服务器向客户端推送一个helloworld字符串。而接收到字符串HTTP连接就断开了,然后Ajax再立即发出请求等待服务器的下次响应。
-
苹果手机长图怎么截图,苹果手机截长图的两种方法
1、长截图办法一iOS13上新之后自带的长截图方法,是在我们浏览网页的时候使用的。操作方法:上音量键+开关键一起按下,然后点开截好的图片,选择“整页”截图即可。2、长截图方法二利用QQ实现长截图。操作方法:首先就是需要我们打开QQ,然后试着上音量键+开关键一起按下...
-
省内移动数据流量是指什么
省内移动数据流量是指你的SIM卡所属省份的可用GPRS流量,如果出了你的卡所属的省份,去别的省,那省内移动数据流量就不可以使用,只能使用全国通用流量。移动数据流量有省内流量和全国通用流量,国内流量和省内流量是有所区别的。首先优先度不同:正常情况下,如果用户在自...
-
关于底噪的意思介绍
1、底噪亦称背景噪声,基本所有的好耳机都有底噪,耳机底噪一般都是因为前端的问题,耳机的灵敏度越高对于底噪就越敏感,一些高灵敏度和低阻抗的耳机会把底噪放大,如果加大音量的情况下,底噪会更加的明显。2、检测MP3底噪,一般方法是在夜晚等比较安静的环境中戴上耳机,播...
-
黑色背景拍照窍门详解
1、调整拍摄角度,寻找背景:既然是拍摄黑背景,在拍摄前我们尽量选择深色的背景,这样也就更加容易达到效果。不过深色不一定要是纯黑色,只要颜色较为深沉,偏向暗色调的均可。拍摄前多多观察,寻找不同的拍摄角度,以找到有反差的深色作为背景。要多尝试不同的角度,直至主体...