长连接短连接socket及windows连接数限制配置

原文地址:https://blog.csdn.net/huangjin0507/article/details/52233443

TCP/IP 
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 
在传输层中有TCP协议与UDP协议。 
在应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议 
                 UDP包括DNS、TFTP等协议 
短连接 
连接->传输数据->关闭连接 
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。 
  
长连接 
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。 
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。 
  
http的长连接 
HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP 1.1默认进行持久连接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。 
  
什么时候用长连接,短连接? 
 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。 
  
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。 
  
总之,长连接和短连接的选择要视情况而定。 
  
发送接收方式 
1、异步
 
报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况: 
(1)异步双工:接收和发送在同一个程序中,由两个不同的子进程分别负责发送和接收 
(2)异步单工:接收和发送是用两个不同的程序来完成。 
2、同步 
报文发送和接收是同步进行,既报文发送后等待接收返回报文。 同步方式一般需要考虑超时问题,即报文发出去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。 
  
在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。 

Socket是什么 

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

Socket 通信示例

主机 A 的应用程序要能和主机 B 的应用程序通信,必须通过 Socket 建立连接,而建立 Socket 连接必须需要底层 TCP/IP 协议来建立 TCP 连接。建立 TCP 连接需要底层 IP 协议来寻址网络中的主机。我们知道网络层使用的 IP 协议可以帮助我们根据 IP 地址来找到目标主机,但是一台主机上可能运行着多个应用程序,如何才能与指定的应用程序通信就要通过 TCP 或 UPD 的地址也就是端口号来指定。这样就可以通过一个 Socket 实例唯一代表一个主机上的一个应用程序的通信链路了。

建立通信链路
当客户端要与服务端通信,客户端首先要创建一个 Socket 实例,操作系统将为这个 Socket 实例分配一个没有被使用的本地端口号,并创建一个包含本地和远程地址和端口号的套接字数据结构,这个数据结构将一直保存在系统中直到这个连接关闭。在创建 Socket 实例的构造函数正确返回之前,将要进行 TCP 的三次握手协议,TCP 握手协议完成后,Socket 实例对象将创建完成,否则将抛出 IOException 错误。
与之对应的服务端将创建一个 ServerSocket 实例,ServerSocket 创建比较简单只要指定的端口号没有被占用,一般实例创建都会成功,同时操作系统也会为 ServerSocket 实例创建一个底层数据结构,这个数据结构中包含指定监听的端口号和包含监听地址的通配符,通常情况下都是“*”即监听所有地址。之后当调用 accept() 方法时,将进入阻塞状态,等待客户端的请求。当一个新的请求到来时,将为这个连接创建一个新的套接字数据结构,该套接字数据的信息包含的地址和端口信息正是请求源地址和端口。这个新创建的数据结构将会关联到 ServerSocket 实例的一个未完成的连接数据结构列表中,注意这时服务端与之对应的 Socket 实例并没有完成创建,而要等到与客户端的三次握手完成后,这个服务端的 Socket 实例才会返回,并将这个 Socket 实例对应的数据结构从未完成列表中移到已完成列表中。所以 ServerSocket 所关联的列表中每个数据结构,都代表与一个客户端的建立的 TCP 连接。
 
备注:
Windows 下单机最大TCP连接数
调整系统参数来调整单机的最大TCP连接数,Windows 下单机的TCP连接数有多个参数共同决定:
以下都是通过修改注册表[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
 
1.最大TCP连接数      TcpNumConnections
2.TCP关闭延迟时间    TCPTimedWaitDelay    (30-240)s
3.最大动态端口数   MaxUserPort  (Default = 5000, Max = 65534) TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 Socket 连接
4.最大TCB 数量   MaxFreeTcbs
系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。
非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存)Server 版本,这个的默认值为 2000。也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。
5. 最大TCB Hash table 数量   MaxHashTableSize TCB 是通过Hash table 来管理的。
这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP  连接用时就越少。这个值必须是2的幂,且最大为65536.
 
IBM WebSphere Voice Server 在windows server 2003 下的典型配置
MaxUserPort = 65534 (Decimal)
MaxHashTableSize = 65536 (Decimal)
MaxFreeTcbs = 16000 (Decimal)
这里我们可以看到 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。

http://zhaohuiopensource.iteye.com/admin/blogs/1498256

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java Socket是Java提供的一个网络编程的API接口,其中包含长连接连接两种方式。长连接是指在客户端和服务器之间建立一个持续连接的通讯机制,直到双方的任意一方中断连接为止。而连接则是指在客户端和服务器之间建立一个暂的连接通讯机制,当双方完成通讯后立即关闭连接长连接的优点是可以减少建立、断开及数据传输的时间延迟,同时可以减轻服务器的负担。它适用于需要频繁通信的应用,如IM等。但是,长时间持有连接会对系统资源消耗较大,可能会导致内存泄漏和服务的无法正常运行。 连接的优点是能够及时释放系统资源,减少服务器的负担,使得系统更加稳定。它适用于一次性传输数据,如HTTP的请求和响应等。但是,由于每次建立连接需要时间,因此将导致数据传输的延迟。 综上所述,选择长连接连接需要根据具体的情况来确定。一般来说,频繁通信需要使用长连接,单次传输数据需要使用连接。无论使用长连接还是连接,都需要注意及时释放资源,避免出现系统负载过大或内存泄漏等问题。 ### 回答2: Java Socket是一种在网络通讯中广泛使用的技术,可以实现多种通信模式,包括长连接连接。在使用Socket进行通讯时,需要选择合适的连接方式,以满足具体的通讯需求。 长连接是指在一段时间内保持与服务器端的连接,进行多次数据传输。在长连接的模式下,客户端和服务器之间的连接是持续性的,可以随时进行数据传输和通讯。长连接的优点是可以减少连接建立和断开所产生的大量开销,提高效率。同时,长连接也适用于需要频繁传输数据,而不需要频繁建立连接的场景。但是,长连接也存在一定的缺点,如过长的保持连接时间可能会浪费网络资源,增加服务器负载等。 连接是指每次通讯都需要新建连接进行数据传输,通讯后立即断开连接,客户端和服务器之间不保持连接状态。连接的优点在于每次通讯后及时释放资源,能够更好地控制资源的使用,并且不会出现连接保持时间过长,导致资源浪费和服务器负载过高的情况。但是,连接也存在一定的缺点,如通讯次数频繁建立和断开连接会增加额外的开销,造成通讯效率降低。 在使用Java Socket时,需要根据实际情况选择合适的连接方式,以满足通讯效率和资源利用的需求。对于需要频繁通讯的场景,建议使用长连接,可以减少连接开销并提高效率。对于通讯次数较少的场景,可以使用连接,可以更好地控制资源的使用。总之,选择何种连接方式应该根据具体的应用场景来确定。 ### 回答3: Java中的Socket是一种网络编程的模块,它使用TCP协议进行通信。TCP是一个基于连接的协议,因此在Java Socket中,可以使用长连接连接长连接连接的区别主要在于连接的时长和数据传输量。 长连接是指在一定时间内,客户端和服务器之间保持一直连接状态。也就是说,客户端与服务器建立连接后,在一定时间内可以不断交换数据,直到连接关闭。这种连接适用于对实时性要求较高的系统。由于在客户端与服务器之间建立连接的时间和数据传输的开销比较大,因此使用长连接系统需要注意服务器的性能和网络带宽等因素。对于需要频繁交互数据的应用(如聊天系统、在线游戏等),通常采用长连接的方式。 连接是指在完成一次数据传输后立即关闭连接。也就是说,客户端和服务器只在数据传输的时候建立连接,传输完成后立即关闭。这种连接适用于对实时性要求不高的系统连接不需要保持连接状态,因此具有比较低的资源开销。对于需要交换数据量较小、频率不高的应用(如文件下载),通常采用连接的方式。 总的来说,长连接连接都有各自的优缺点,在实际应用中需要根据不同的系统需求进行选择。需要注意的是,长连接连接的选择不仅取决于客户端与服务器之间的交互形式,也取决于服务器的性能和网络带宽等因素。对于需要频繁建立和关闭连接的情况,长连接可能会导致资源的浪费,而连接可能会占用更多的带宽和处理时间。因此,在实际应用中需要进行综合考虑,选择最优的连接方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值