当前位置: 首页 > news >正文

网站建设流行技术网站宣传文案范例

网站建设流行技术,网站宣传文案范例,wordpress 本地上传服务器,wordpress问卷调查SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后#xff0c;它的端口可能会在一段时间内处于TIME_WAIT状态#xff0c;此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口#xff0c;即使之前的套接字仍处…SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后它的端口可能会在一段时间内处于TIME_WAIT状态此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口即使之前的套接字仍处于TIME_WAIT状态。 TIME_WAIT状态的产生 客户端和服务器都可以主动发起关闭连接上图是客户端主动发起的TCP连接关闭。首先调用close()发起主动关闭的一方在发送最后一个ACK之后会进入time_wait的状态也就说该发送方会保持2MSL时间之后才会回到初始状态。在time_wait的状态下定义这个连接的四元组客户端IP地址和端口服务端IP地址和端口号不能被使用。 MSLMaximum Segment Lifetime也就是最大报文生存时间 。 MSL到底是多长时间可以通过下面的命令来查询不同的操作系统时间不一样 $ sysctl -a | grep ipv4.tcp_fin_timeout sysctl: unable to open directory /proc/sys/fs/binfmt_misc/ net.ipv4.tcp_fin_timeout 60time_wait至少需要持续2MSL时长这2个MSL中的第一个MSL是为了等自己发出去的最后一个ACK从网络中消失而第二MSL是为了等在对端收到ACK之前的一刹那可能重传的FIN报文从网络中消失。如果time_wait时间是一个MSL而time_wait结束后使用了相同的IP和Port建立了新的TCP连接由于旧连接重传的FIN报文还没有在网络中消失因此会干扰到新的TCP连接。 SO_REUSEADDR的使用 可以使用Socket类的setReuseAddress()方法来设置SO_REUSEADDR选项的值。示例代码如下 ServerSocket serverSocket1 new ServerSocket(); serverSocket1.setReuseAddress(false); serverSocket1.bind(new InetSocketAddress(8099)); serverSocket1.close();使用SO_REUSEADDR选项时有两点需要注意 必须在调用bind方法之前使用setReuseAddress方法来打开SO_REUSEADDR选项。因此要想使用SO_REUSEADDR选项就不能通过Socket类的构造方法来绑定端口。 必须将绑定同一个端口的所有的Socket对象的SO_REUSEADDR选项都打开才能起作用。 SO_REUSEADDR异常的演示 Socket服务端代码如下 package com.morris.socket;import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets;/*** Socket客户端演示SO_REUSEADDR** see java.net.SocketOptions*/ public class ReuseAddressServerDemo {public static void main(String[] args) throws IOException {ServerSocket serverSocket1 new ServerSocket();System.out.println(serverSocket1.getReuseAddress());// serverSocket1.setReuseAddress(false);serverSocket1.bind(new InetSocketAddress(8099));Socket socket serverSocket1.accept();socket.getOutputStream().write(hello.getBytes(StandardCharsets.UTF_8));socket.close();} }Socket客户端代码如下 package com.morris.socket;import java.io.IOException; import java.net.Socket;/*** Socket客户端演示SO_REUSEADDR** see java.net.SocketOptions*/ public class ReuseAddressClientDemo {public static void main(String[] args) throws IOException {// 这里只建立连接不发送数据也不接受数据也不关闭连接这样服务端才会出现TIME_WAITnew Socket(172.24.104.61, 8099);System.in.read();} }当客户端与服务端建立连接后服务端发完数据就会立即关闭此时会进入TIME_WAIT状态 $ netstat -anotp| grep 8099 tcp6 0 0 172.24.104.61:8099 172.24.104.61:54542 FIN_WAIT2 - timewait (57.97/0/0)我们可以看到四元组172.24.104.61:8099172.24.104.61:54542代表的这个链接已经进入FIN_WAIT2状态而且还需要等待57.97s才能进入CLOSE状态。 当SO_REUSEADDR选项为true也就是serverSocket1.setReuseAddress(true)也可以不进行设置因为默认就是true允许地址重用此时再次启动ReuseAddressServerDemo程序能够成功启动不会抛出端口被占用的异常。 当SO_REUSEADDR选项为false也就是serverSocket1.setReuseAddress(false)不允许地址重用此时再次启动ReuseAddressServerDemo程序就会抛出下面的异常 Exception in thread main java.net.BindException: Address already in useat java.base/sun.nio.ch.Net.bind0(Native Method)at java.base/sun.nio.ch.Net.bind(Net.java:555)at java.base/sun.nio.ch.Net.bind(Net.java:544)at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:640)at java.base/java.net.ServerSocket.bind(ServerSocket.java:392)at java.base/java.net.ServerSocket.bind(ServerSocket.java:340)at com.morris.socket.ReuseAddressServerDemo.main(ReuseAddressServerDemo.java:20)这时只有等四元组172.24.104.61:8099172.24.104.61:54542代表的这个链接进入CLOSE状态后才能再次启动ReuseAddressServerDemo程序。 SO_REUSEADDR的注意事项与使用场景 在使用SO_REUSEADDR选项时需要注意以下几点 SO_REUSEADDR选项必须在调用bind()函数之前设置否则设置不会生效。 在使用SO_REUSEADDR选项时需要确保不同的套接字使用相同的协议、地址和端口组合。 使用SO_REUSEADDR选项不能使不同的线程或进程监听相同的端口实现端口服用。 使用场景 服务器程序重启当服务器程序需要重启时为了避免等待操作系统回收端口的时间可以设置SO_REUSEADDR选项。这样重启后的服务器程序可以快速绑定到之前使用的端口上实现快速恢复服务。 测试和调试在开发和测试阶段可能需要频繁地启动和停止服务器。使用SO_REUSEADDR可以使得测试更加方便因为不需要担心地址和端口已经被其他进程使用的问题。 time_wait产生的危害以及如何解决 大量的time_wait产生需要的条件: 高并发 服务器主动关闭连接 如果服务器不主动关闭连接,那么TIME_WAIT就是客户端的事情了 在高并发短连接的TCP服务器上当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于time_wait状态。在time_wait的状态下定义这个连接的四元组客户端IP地址和端口服务端IP地址和端口号不能被使用。因此高并发可以让服务器在短时间范围内同时占用大量端口。如果客户端的并发量持续很高此时部分客户端就会因为端口已经被占用而显示连接不上。 如何解决大量time_wait产生的危害 调整优化linux内核参数出现大量TIME_WAIT的情况一般是服务端没有及时回收端口可以缩减time_wait时间。 服务器不主动关闭连接 重用端口设置套接字选项为SO_REUSEADDR告诉操作系统如果端口忙但占用该端口TCP连接处于TIME_WAIT状态,则该端口可被重用。如果TCP连接处于其他状态依然返回端口被占用。该选项对服务程序重启非常有用。 使用长连接HTTP请求的头部connection设置为keep-alive
http://www.pierceye.com/news/630142/

相关文章:

  • 焦作网站建设价格asp网站怎么运行
  • 宜昌市做网站的公司页面设计图片大全
  • 购买网站空间多少钱石家庄权威发布
  • 网站开发数据库动态管理网页制作商品页面模板
  • 电商网站设计模板平面设计师兼职网站
  • 网站建设的技术手段如何选择最好的域名
  • 汕头企业网站建设服务环境艺术设计网站推荐
  • 小米网站建设外贸网站建设哪家公司好
  • 怎样推广产品专业黑帽seo推广
  • 网站调用字体在阿里云备案网站通过
  • 手机网站做落地页石家庄网络营销
  • 如何把网站主关键词做到百度首页网站页面设计优化方案
  • 做门户网站多少钱做视频解析网站播放器和接口
  • 打开一个网站网站被挂马无法访问
  • 大连网站建设公司排名装饰设计公司哪个好
  • 苏州企业建设网站公司400电话网站源码
  • 贵州住房和城乡建设厅官网泰安千橙网站建设优化熊掌号
  • metro网站模板平面设计师网站
  • 怎样通过阿里云建设网站国内免费crm
  • 网站开发都需要学什么iis7网站建设
  • 网站 关键字it网站建设资讯网
  • 白银网站建设公司石家庄建行网站
  • 做网站全部乱码怎么办教学资源网站建设方案
  • 自己做的网站怎么添加文档做淘宝详情的网站
  • 安全认证的机票网站成就怎么做山东省住房和城乡建设厅政务服务
  • 海口网站建设方案咨询信息流优化师面试常见问题
  • 网上课程网站wordpress自定义页面分页
  • 自建站成本深圳网站建设营销服务平台
  • 模仿网站怎么做网站编辑建设
  • 湖南做网站 磐石网络引领免费网上开店