精华内容
下载资源
问答
  • HTTP – 这服务器和客户端之间的实际传输协议 – “无状态的”,因为它在调用之间不记住任何内容。通过HTTP访问的每个资源都单个请求,它们之间没有线程连接。如果您加载的网页中包含一个HTML文件,其中包含三...

    HTTP – 这是服务器和客户端之间的实际传输协议 – 是“无状态的”,因为它在调用之间不记住任何内容。通过HTTP访问的每个资源都是单个请求,它们之间没有线程连接。如果您加载的网页中包含一个HTML文件,其中包含三个< img>标签命中同一个服务器,将有四个TCP连接协商和打开,四个数据传输,四个连接关闭。在服务器上没有状态保存在协议级别,服务器在你进来时知道你的任何事情。

    HTTP 1.1增加了各种类型的持久连接机制,因为一个真正的无状态协议产生的不可避免的性能问题,我们现在忽略这一点,因为他们不真的使HTTP状态,它们只是使它脏无状态,而不是纯无状态。)

    为了帮助你理解差异,想象一个协议,如Telnet或SSH是无状态的。如果你想得到一个远程文件的目录列表,你必须像一个原子操作一样,连接,登录,更改到目录并发出ls命令。当ls命令完成显示目录内容时,连接将关闭。如果你想显示一个特定文件的内容,你必须重新连接,登录,更改到目录,现在发出cat命令。当显示文件的命令完成时,连接将再次关闭。

    当你这样看,虽然Telnet / SSH的镜头,听起来很蠢,不是吗?好吧,在某些方面,它是,在某些方面它不是。当协议是无状态的时,服务器可以做一些很好的优化,数据可以很容易地传播。使用无状态协议的服务器可以非常有效地扩展,因此实际的单个数据传输可能非常慢(打开和关闭TCP连接不便宜!)整个系统可以非常高效地扩展到任何数量的用户。

    但…

    除了查看静态网页,几乎所有你想做的事情都会涉及会话和状态。当HTTP用于其原始目的(共享静态信息,如科学论文)时,无状态协议有很大的意义。当你开始使用它的东西,如Web应用程序,在线商店等,那么无状态开始是一个麻烦,因为这些是固有的有状态的活动。结果,人们非常迅速地想出了在无状态协议之上采用状态的方法。这些机制包括诸如Cookie之类的东西,比如URL中的编码状态,并且让服务器基于这些状态动态地激发数据,比如隐藏的状态请求,比如…好吧,像一堆东西,包括更现代的像Web套接字。

    以下是您可以关注的几个链接,以深入了解这些概念:

    展开全文
  • 图上的return出现在,通知各个客户端有人下线的代码中,表达啥意思。麻烦指教 谢谢谢谢![图片](https://img-ask.csdn.net/upload/201709/24/1506239798_205372.jpg)![图片]...
  • 客户端关闭浏览器2.Session过期3.服务器端调用了HttpSession的invalidate()方法。"一个浏览器就是一个新session,关了浏览器session就结束了"session 在服务器端建立的,浏览器访问服务器会有一个sessionid,浏览器...

    以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:

    1.客户端关闭浏览器

    2.Session过期

    3.服务器端调用了HttpSession的invalidate()方法。

    "一个浏览器就是一个新session,关了浏览器session就结束了"

    session 是在服务器端建立的,浏览器访问服务器会有一个sessionid,浏览器端通过sessionid定位服务器端的session,session的创建和销毁由服务器端控制。当浏览器关闭后,session还存在在服务器端,只不过你新开的浏览器去访问服务器会创建另一个session,这个时候的 sessionid已经不一样了。也就不能访问上一次的哪个session里面的内容了。

    "session的创建和销毁由服务器端控制",服务器端才有session,客户端只是通过sessionid来匹配session.

    那服务器端session如何建的呢? 普通html不会创建,jsp默认是创建的,只要你访问任何一个jsp就会创建(不过只创建一次),你关闭浏览器重新访问又会创建一个,这些创建的session由服务器自己控制销毁,你也可以在服务器端代码中销毁。

    什么情况下需要用上这种服务器端的session方式?

    默认情况下,jsp被访问就会创建session(最开始是空的没有数据的),你的应用中的代码只是往session里面put数据。网上说可以 通过 <%@ page session="false"%>来不让jsp自动创session.我自己测试了一下(用sessionlistener),根本不起作用, session照样创建成功。

    最后说一下,只有服务器端才有session.客户端被存到本地的是cookie.不过安全性低。所以不能放重要的数据。

    ============================================================================

    sesion其实简单:

    先request.getsession(),当已有一个session与前request相关时就返回对这个 session的引用,当没有时就生成一个.一个session在server通过一个sessionid来标识的。也就是说在一个server是不会有 两个相同sessionid的session.

    那麼session为什麼会和cookie扯在一起呢?

    正如我所说对於一 个session来说它的sessionid就是其身份的标识。若我们将这个sessionid保存到用户端,当同一个会话的后序请求来时都将这个 sessionid放在request 的header中(也就是我们说的cookie)这样不就可以来验证这个request是否与之前的request是同一个会话了吗!

    什麼是会话呢?

    我 们可以通俗一点理解。只要你的browers不关我们就称这一系列的request与response为一个会话。一断你close就称这个会话已结束。 虽然会话结束但并不代表你的session就被destroy.因为session是存活在server上的。它的生命完全由server来主宰 (web.xml中的设定).

    虽然你的session还存活在server上但你已无法再取得它。因为j2ee的api只给我们一种方法来取得与当前会话相关的session的引用:request.getsession() or reqeust.getsession(boolean)

    =======================================================================

    一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);

    这也是JSP中隐含的session对象的来历。

    能不能让服务端不创建sessionid呢?试验下**************************>

    <%@ page session="false"%>

    不是不让页面创建Session,而是在此JSP页面无法使用session.可以减少网络数据传输.

    展开全文
  • 看到keep-alive你能想到的一定缓存俩个字,http中connection的keep-alive也这样吗?那可不一定,下面我们就来讲讲connection的keep-alive....它通过重用一个 TCP 连接来发送/...keep-alive 是客户端和服务端的一个约

    看到keep-alive你能想到的一定是缓存俩个字,http中connection的keep-alive也是这样吗?那可不一定,下面我们就来讲讲connection的keep-alive.其实http的connection的keep-alive和缓存没有半毛钱关系。HTTP keep-alive 也称为 HTTP 长连接。它通过重用一个 TCP 连接来发送/接收多个 HTTP请求,来减少创建/关闭多个 TCP 连接的开销。

    一、什么是keep-alive?

    keep-alive 是客户端和服务端的一个约定,如果开启 keep-alive,则服务端在返回 response 后不关闭 TCP 连接;同样的,在接收完响应报文后,客户端也不关闭连接,发送下一个 HTTP 请求时会重用该连接。

    在 HTTP/1.0 协议中,如果请求头中包含:

    Connection: keep-alive
    

    则代表开启 keep-alive,而服务端的返回报文头中,也会包含相同的内容。

    在 HTTP/1.1 协议中,默认开启 keep-alive,除非显式地关闭它:

    Connection: close
    

    二、到底用不用keep-alive?

    keep-alive 技术创建的目的,就是能在多次 HTTP 之间重用同一个 TCP 连接,从而减少创建/关闭多个 TCP 连接的开销(包括响应时间、CPU 资源、减少拥堵等),参考如下示意图(来源:维基百科):

    然而天下没有免费的午餐,如果客户端在接收完所有的信息之后还没有关闭连接,则服务端相应的资源还在被占用(尽管已经没用了)。例如 Tomcat 的 BIO 实现中,未关闭的连接会占用对应的处理线程,如果一个长连接实际上已经处理完毕,但关闭的超时时间未到,则该线程会一直被占用(使用 NIO 的实现没有该问题)。

    显然,如果客户端和服务端的确需要进行多次通信,则开启 keep-alive 是更好的选择,例如在微服务架构中,通常微服务的使用方和提供方会长期有交流,此时最好开启 keep-alive。

    在一些 TPS/QPS 很高的 REST 服务中,如果使用的是短连接(即没有开启keep-alive),则很可能发生客户端端口被占满的情形。这是由于短时间内会创建大量TCP 连接,而在 TCP 四次挥手结束后,客户端的端口会处于 TIME_WAIT一段时间(2*MSL),这期间端口不会被释放,从而导致端口被占满。这种情况下最好使用长连接。

    二、客户端如何开启keep-alive

    现在我们用到的几乎所有工具都是默认开启长连接的:

    • 对于浏览器而言,几乎你现在用的浏览器(包括 IE6)都默认使用 keep-alive 了。
    • Java8 中的 HttpURLConnection 默认开启长连接,但是默认连接池中只保留 5 个长连接1,如果同时超过 5 个线程在使用,则会创建新的连接,结束后多于 5 个的部分会被客户端主动关闭。
    • Apache HttpClient 默认为每个地址保留 2 个长连接,连接池中最多共保留 20 个连接2
    • Python requests 如果使用 session 则会默认开启长连接。

    其实keep-alive就是这么简单。。。

    展开全文
  • 写程序总是能遇到种种不同的矛盾问题,好多都没遇到的,有些别人没遇到过的,无法再网上找到同样的经历的答案... 这次在做项目,项目RCP界面客户端,新需求都改造好了,功能都实现了。最后测试的在关闭功能时...

    写程序总是能遇到种种不同的矛盾问题,好多都是没遇到的,有些是别人没遇到过的,无法再网上找到同样的经历的答案。这时我们该怎么做?


    1. 首先要分析问题原因所在,什么情况出现这问题,尝试着去调试,有些问题很明显,有些需求去猜测。
    2. 其次就是不断测试种种可能。
    3. 最后应该对那种可能进行细分和处理。
    这次在做项目,项目是RCP界面客户端,新需求都改造好了,功能都实现了。最后试的在关闭功能时候,出现了问题。关闭功能做了修改,添加了一个确认框。


     


    写的代码就那么几行
    	public boolean preWindowShellClose() {
    	
    		MessageBox msgBox = new MessageBox(new Shell(), SWT.YES | SWT.NO| SWT.ICON_QUESTION);
    		msgBox.setText("退出系统");
    		msgBox.setMessage("确定退出系统?");
    		if (msgBox.open() == SWT.YES) {
    			// 退出请求
    			MonitorUtil.sendLogout();
    			try {
    				Thread.sleep(2000);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    
    			System.exit(0);
    			LogCvt.info("正在关闭窗口....");
    			return true;
    		}
    		return false;
    
    	}
     

    我后来进行调试,调试情况让我明白一件事在确认框提示msgBox.open() 之后要获取用户选择的结果时阻塞住了,永远都得不到,就死卡在了open()状态,点击“是”或“否”按钮,确认框能消失,但是界面无法关闭或卡片,点击不了任何东西。
    这可以说明,那确认框是居于父窗体模式,子窗体是点击不了的,不管你是否点击了是或者否按钮,当前有一个线程就是获取不到事件来通知这主线程我选择的是或者是否,返回open函数后的int信息(SWT.YES or SWT.NO),所以卡在了哪里。
    这我猜测,但是确实是这个情况。我测试过把确认框MessageBox 对象去掉,立马能关掉。那就是这MessageBox 惹的祸,为啥我改了新功能就出了这问题呢?

    我思考我新功能加了什么?我的界面接收消息是被动推送过来的,还有统计同能,数据刷新的很厉害,平均每秒都有几十条数据刷新过来,还是多个服务器发送过来的,UI界面刷新频率很高,TABLE对象也时常在更新(我用压力测试工具频率调的有点高,多个服务器多个压力测试工具在进行测试,客户端就这一个接受多个客户端数据)。
    这一情况下,我就想到msgBox.open() 窗体打开之后一直无法返回用户点击是或者否按钮的事件来返回选择的是YES 还是NO情况。肯定是那线程被别的占用了,无法等待用户选择是还是否按钮情况。问题是那线程被谁占用了呢,一想肯定是数据刷新频率很高,占用了那线程。
    那我是不是应该在关闭的时候先停止了数据的刷新,选择了是或者否的时候在开始数据接收显示呢。

    于是我在数据接收端添加了个boolean isCloseWindows = false,当我点击了关闭按钮,把isCloseWindows改成true;然后再进行提示确认框。很显然我测试通过了,解决了这个特殊的情况。

    修改了关闭按钮代码

     

    public boolean preWindowShellClose() {
    		//禁止推送数据,否则无法退出系统,卡屏.
    		SendMsgToUI.setCloseWindows(true);
    		MessageBox msgBox = new MessageBox(new Shell(), SWT.YES | SWT.NO| SWT.ICON_QUESTION);
    		msgBox.setText("退出系统");
    		msgBox.setMessage("确定退出系统?");
    		if (msgBox.open() == SWT.YES) {
    			// 退出请求
    			MonitorUtil.sendLogout();
    			try {
    				Thread.sleep(2000);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    
    			System.exit(0);
    			LogCvt.info("正在关闭窗口....");
    			return true;
    		}
    		SendMsgToUI.setCloseWindows(false);
    		return false;
    
    	}
     

    开始之前将SendMsgToUI.setCloseWindows(true);设置ture停止接收数据,

    如果选择了否SendMsgToUI.setCloseWindows(false);改回来,继续接收数据。

    这样就解决了这情况。随笔记录了下来。


     

    展开全文
  • 设置了QQ登录保护后,在QQ客户端登录QQ时,需要您在弹出的统一安全验证窗口中验证密保,如QQ安全中心手机版,成功完成验证后即可登录QQ;若您需要取消QQ登录保护,请您进入QQ安全中心网站,再点击【关闭保护】链接,...
  • 长连接的意思就是说声明一个事件然后打开操作…然后关闭 这就为一个长连接,长连接只有最开始的时候打开结束的时候关闭,中间想发什么数据就发什么 想接收什么数据就接收, 短连接的意思就是每次收或者发都要打开关闭 ...
  • 新下载的CF游戏,登陆进去就弹出...提示翻译的意思就是 “检测到客户端文件损坏,关闭游戏客户端”。分析一波为什么会出现这样的情况。检测到客户端文件损坏,如果你的电脑新电脑,以前也没下载过CF这一款游戏,那...
  • 但是在实际操作过程中发现你们的框架服务对应的json-rpc客户端无法使用到别的框架上,这让我很忧桑,我也翻了所有的相关issue,发现也有几个同学提了类似的需求,虽然关闭了,但是...
  • Cookie是什么

    千次阅读 2017-08-26 12:48:27
    定义: Cookis直译过来就是“小型文本文件”的意思。 在计算机术语中,Cookis指某些网站为了辨别用户...内存Cookie(非持久Cookie):由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间短暂的。 硬
  • set nocount on 什麼意思

    千次阅读 2008-11-25 14:26:00
    我想請問一下: set nocount on 什麼意思, 為什麼很多的stored procedures的第一行都有遮一句話??多謝!!! 每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这...
  • 我想請問一下: set nocount on 什麼意思, 為什麼很多的stored procedures的第一行都有遮一句話??多謝!!! 每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这...
  • 对此我们必须要清楚自己口中所说的失效到底是什么意思。 事实上,当我们关闭浏览器时,我们只是关闭客户端,而 session 是存储在服务端上的,所以从理论上讲,session 的消失和浏览器的关闭并没有多大的关系。 ...
  • 什么意思呢?之前说过TCP双工的,它的打开需要三次握手,三次握手也就是3个步骤,其含义为:客户端打开接收、发送的功能;服务器端认可并也打开接收、发送的功能;客户端认可。当第1、2步骤完成、第3步步骤未完成...
  • 对此我们必须要清楚自己口中所说的失效到底是什么意思。 事实上,当我们关闭浏览器时,我们只是关闭客户端,而 session 是存储在服务端上的,所以从理论上讲,session 的消失和浏览器的关闭并没有多大的关系。 ...
  • 前景回顾: TCP断开连接为什么是四次挥手,不是二次挥手/三次挥手?. MSLMaximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他任何报文在网络上存活的最长时间,超过这个时间报文将被...
  • 结合论坛用户操作谈asp.net表单验证(上)... 什么意思呢,就是说做表单验证时服务器端程序不能假定客户端程序正确的而不加检测,这样如果客户端关闭javascript就可能造成出错,而如果只做服务器端检测,那么需要提交
  • 什么意思呢,就是说做表单验证时服务器端程序不能假定客户端程序正确的而不加检测,这样如果客户端关闭javascript就可能造成出错,而如果只做服务器端检测,那么需要提交到服务器端再返回,那么效率
  • 结合论坛用户操作谈asp.net...什么意思呢,就是说做表单验证时服务器端程序不能假定客户端程序正确的而不加检测,这样如果客户端关闭javascript就可能造成出错,而如果只做服务器端检测,那么需要提交到服务器端再返
  • nginx在接收客户端的请求时,可能由于客户端或服务端出错了,要立即响应错误信息给客户端,而nginx在响应错误信息后,大分部情况下需要关闭当前连接。如果客户端正在发送数据,或数据还没有到达服务端,...
  • lingering_close,字面意思就是...nginx在接收客户端的请求时,可能由于客户端或服务端出错了,要立即响应错误信息给客户端,而nginx在响应错误信息后,大分部情况下需要关闭当前连接。nginx执行完write()系统调用把
  • 1、ignore_user_abort(true)是什么意思? 无论客户端是否关闭浏览器,下面的代码都将得到执行 2、set_time_limit(0)是什么意思? 脚本执行没有时间方面的限制,也就是可以一直执行,默认php脚本最大执行30秒。 ...
  • nginx基础概念(100%)之lingering_close

    千次阅读 2013-12-10 16:09:21
    lingering_close,字面意思就是...nginx在接收客户端的请求时,可能由于客户端或服务端出错了,要立即响应错误信息给客户端,而nginx在响应错误信息后,大分部情况下需要关闭当前连接。nginx执行完write()系统调用把
  • 通常,在我们使用网页在线http代理ip时会遇到很多的错误代码,那么大家知道常见的错误代码是什么意思吗?下面就给大家详细介绍下相关信息。 1、代理IP客户端在拨入中发生733错误。 由于客户端在拨入代理IP服务器之后...
  • 当response提交后,不能调用sendError(),什么意思? 出现这个错误,一定多次response导致的。可以这么理解,承载客户端和服务器进行Http交互的Socket连接已经关闭了,而你还试图发送数据给客户端,显

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

关闭客户端是什么意思