本文目录一览

1,保持长连接是什么意思

长连接就是客户端长时间的连接在服务器上。 一般服务器都设有超时限制即一定时间内连接处于非活动状态(没有任何数据传输)服务器就会把连接自动断开。所以需要客户端每隔一段时间给服务端发送一个心跳数据包以保持长链接。 服务器在一段时间中没有收到客户端的数据(应用层数据),不一定会断开连接:在TCP这个层次上说,没有这样的设计;在应用层上,有可能某些应用会提供这样的功能。 在TCP的实现中,提供了一种心跳信号,但这种信号的周期很长,无法迅速的探出网络中的异常情况。 所以一旦网络出现中断,比如路由器被移走等等,在服务器和客户端之间的连接可能还会维持着,直到心跳信号周期的到来。为了能够及时获取服务器和客户端之间网络(包括网络中的所有环节)的连通状态,有必要在应用层上定义自己的心跳信号。

保持长连接是什么意思

2,五指棋如何下

同一色的5个棋子横/竖/斜向连成一条线者获胜
五子棋禁手规则: 鉴于无禁手规则黑棋必胜,人们不断采用一些方法限制黑棋先行的优势,以平衡黑白双方的形式。于是针对黑棋的各种禁手逐渐形成。禁手最简单地说就是一手棋形成长连(连成五个以上连续相同的棋子),或两个以上的活三,或者两个以上的四,并且这些四、活三和长连都要包括这一手棋。并且规定,当禁与连五同时出现时为黑方取胜禁手不成立,禁手是针对黑棋而言的,白棋没有任何禁手。例如:黑棋长连是禁手,白棋长连算赢棋。 禁手:对局中如果使用将被判负的行棋手段。 三三禁手:黑棋一子落下同时形成两个或两个以上的活三. 四四禁手:黑棋一子落下同时形成两个或两个以上的冲四或活四。 长连禁手:黑棋一子落下形成一个或一个以上的长连。 建议新手选择进入无禁手区!

五指棋如何下

3,如何区分HTTP协议的无状态和长连接

HTTP是无状态的 也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话 HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。 如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。 实现长连接要客户端和服务端都支持长连接。所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差, 所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。最近在看“服务器推送技术”,在B/S结构中,通过某种magic使得客户端不需要通过轮询即可以得到服务端的最新信息(比如股票价格),这样可以节省大量的带宽。传统的轮询技术对服务器的压力很大,并且造成带宽的极大浪费。如果改用ajax轮询,可以降低带宽的负荷(因为服务器返回的不是完整页面),但是对服务器的压力并不会有明显的减少。而推技术(push)可以改善这种情况。但因为HTTP连接的特性(短暂,必须由客户端发起),使得推技术的实现比较困难,常见的做法是通过延长http 连接的寿命,来实现push。接下来自然该讨论如何延长http连接的寿命,最简单的自然是死循环法:【servlet代码片段】public void doGet(Request req, Response res) PrintWriter out = res.getWriter(); ……正常输出页面……out.flush(); while (true) out.print("输出更新的内容"); out.flush(); Thread.sleep(3000); } } 如果使用观察者模式则可以进一步提高性能。但是这种做法的缺点在于客户端请求了这个servlet后,web服务器会开启一个线程执行servlet的代码,而servlet由迟迟不肯结束,造成该线程也无法被释放。于是乎,一个客户端一个线程,当客户端数量增加时,服务器依然会承受很大的负担。要从根本上改变这个现象比较复杂,目前的趋势是从web服务器内部入手,用nio(JDK 1.4提出的java.nio包)改写request/response的实现,再利用线程池增强服务器的资源利用率,从而解决这个问题,目前支持这一非J2EE官方技术的服务器有Glassfish和Jetty(后者只是听说,没有用过)
这些都是基础知识,不过有必要做深入了解。先简单介绍一下。 二者的定义: 当你在浏览网站的时候,web 服务器会先送一小小资料放在你的计算机上,cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来。当下次你再光临同一个网站,web 服务器会先看看有没有它上次留下的 cookie 资料,有的话,就会依据 cookie 里的内容来判断使用者,送出特定的网页内容给你。 cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 cookie 来辨认使用者,以方便送出使用者量身定做的内容,像是 web 接口的免费 email 网站,都要用到 cookie。 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制 来达到保存标识的目的,但实际上它还有其他选择。 cookie机制。正统的cookie分发是通过扩展http协议来实现的,服务器通过在http的响应头中加上一行特殊的指示以提示 浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如javascript或者vbscript也可以生成cookie。而cookie的使用 是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围 大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的http请求头上发送给服务器。 cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这 个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。 会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie 保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏 览器进程间共享,比如两个ie窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式 session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来 使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相 关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应 中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给 服务器。一般这个cookie的名字都是类似于seeesionid。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时 仍然能够把session id传递回服务器。 经常被使用的一种技术叫做url重写,就是把session id直接附加在url路径的后面。还有一种技术叫做表单隐藏字段。就是服务器 会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如: 实际上这种技术可以简单的用对action应用url重写来代替。 cookie 和session 的区别: 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 考虑到安全应当使用session。 3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用cookie。 4、单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。 5、所以个人建议: 将登陆信息等重要信息存放为session 其他信息如果需要保留,可以放在cookie中 二.session的生命周期 session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),sessinon在用户访问第一次访问服务器时创建,需要注意只有访问jsp、servlet等程序时才会创建session,只访问html、image等静态资源并不会创建session,可调用request.getsession(true)强制生成session。 session什么时候失效? 1. 服务器会把长时间没有活动的session从服务器内存中清除,此时session便失效。tomcat中session的默认失效时间为20分钟。 2. 调用session的invalidate方法。 session对浏览器的要求: 虽然session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为session需要使用cookie作为识别标志。http协议是无状态的,session不能依据http连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为jsessionid的cookie,它的值为该session的id(也就是httpsession.getid()的返回值)。session依据该cookie来识别是否为同一用户。 该cookie为服务器自动生成的,它的maxage属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的cookie,因此会共享一个session。 注意:新开的浏览器窗口会生成新的session,但子窗口除外。子窗口会共用父窗口的session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口便可以访问父窗口的session。 如果客户端浏览器将cookie功能禁用,或者不支持cookie怎么办?例如,绝大多数的手机浏览器都不支持cookie。java web提供了另一种解决方案:url地址重写。 url地址重写是对客户端不支持cookie的解决方案。url地址重写的原理是将该用户session的id信息重写到url地址中。服务器能够解析重写后的url获取session的id。这样即使客户端不支持cookie,也可以使用session来记录用户状态。httpservletresponse类提供了encodeurl(string url)实现url地址重写,该方法会自动判断客户端是否支持cookie。如果客户端支持cookie,会将url原封不动地输出来。如果客户端不支持cookie,则会将用户session的id重写到url中。 注意:tomcat判断客户端浏览器是否支持cookie的依据是请求中是否含有cookie。尽管客户端可能会支持cookie,但是由于第一次请求时不会携带任何cookie(因为并无任何cookie可以携带),url地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入cookie了,因此url地址重写后的地址中就不会带有jsessionid了。

如何区分HTTP协议的无状态和长连接


文章TAG:长连  保持  长连接  连接  长连  
下一篇