【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )

简介: 【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )

文章目录

I ServerSocket 端口号绑定参数

II ServerSocket 复用绑定端口设置

III ServerSocket 设置缓冲区大小

IV ServerSocket 设置超时时间

V ServerSocket 设置性能参数



I ServerSocket 端口号绑定参数


1. 建议绑定时机 : 绑定端口号的操作建议在设置的最后一步进行操作 , 如果绑定了端口号 , 很多设置就无效了 ;


2. int backlog 参数作用 : 创建 ServerSocket 对象之后 , 需要绑定本地的 IP 地址和端口号 , 服务器套接字绑定方法还有一个 int backlog 参数 , 这个参数指的是允许等待的连接队列 , 如将该值设置成 10 的效果是 , 当客户端连接服务器 , 但是服务器还没有调用 accept 方法接收客户端的连接 , 此时如果有 10 个以内的客户端连接 , 这 10 个连接都在缓冲区中等待 , 如果出现第 11 个客户端连接 , 此时客户端就会抛出异常 ; 注意这个异常是在客户端触发的 ;


//服务器端绑定本地的 IP 地址和端口号
serverSocket.bind(new InetSocketAddress(Inet4Address.getLocalHost(), 8888), 10);




II ServerSocket 复用绑定端口设置


设置是否可以复用 ServerSocket 绑定的地址和端口号 : setReuseAddress( true ) ;


serverSocket.setReuseAddress(true);


Socket 连接在建立时 , 会使用之前绑定本地的 IP 地址和端口号 , 这个端口号在使用之后 , 2 分钟之内不允许再次使用 ; 进行了该设置之后 , 可以在连接关闭之后 , 马上使用该本地 IP 地址和端口号 ;




III ServerSocket 设置缓冲区大小


1. 缓冲区大小设置 : ServerSocket 只有接收缓冲区设置 , 其原理与 Socket 缓冲区原理相同 ;


① 接收缓冲区设置 ;

serverSocket.setReceiveBufferSize(64 * 1024 * 1024);


2. 设置时机 : 注意设置缓冲区一定要在 accept 之前进行设置 , 如果在连接建立之后设置该缓冲区是无效的 ;




IV ServerSocket 设置超时时间


1. 设置 ServerSocket 超时时间 , 该超时时间没有实际的概念 , 用于设置与阻塞相关操作的超时时间 , ServerSocket 中只有 accept 操作会有阻塞 , 设置了 2 秒阻塞时间 , 如果 accept 阻塞超过 2000 毫秒 , 就会抛出异常 , 此时可以捕获该异常继续等待 2 秒 ;


serverSocket.setSoTimeout(2000);


一般情况下不设置该超时时间 , 即服务器端永久等待客户端连接


2. 单位 : 毫秒 ( ms ) ;




V ServerSocket 设置性能参数


ServerSocket 调用 setPerformancePreferences 设置性能参数 , 与 Socket 调用 setPerformancePreferences 设置原理是一样的 ;

//对延迟性能要求最高
serverSocket.setPerformancePreferences(1, 10, 1);


1. 调用 ServerSocket 对象的 setPerformancePreferences 方法 , 设置连接的性能参数 ; 连接有以下三个性能参数 :


① 连接时间 ;

② 往返延迟 ;

③ 带宽 ;

2. 设置的是权重不是具体性能参数 : 设置的值不是具体的参数 , 而是连接的性能权重 , 对哪个性能要求比较高 ;


3. 连接时间 : 如果该 Socket 的连接很频繁 , 连接后传一个数据 , 马上断开 , 这时候比较看重连接时间性能 , 此时可以将第一个参数设置成 10 , 后两个参数设置成 1 , 表示注重连接时间性能 ;


//设置 连接时间 性能参数较重要
socket.setPerformancePreferences(10, 1, 1);


4. 往返延迟 : 如果开发的是网游服务器 , 此时对延迟很看重 , 这时候可以将第二个参数设置成比较高的权重 ;


//设置 往返延迟 性能参数较重要
socket.setPerformancePreferences(1, 10, 1);


5. 带宽 : 如果开发的是音视频服务器 , 注重带宽性能 , 此时需要将第三个参数设置成较高的权重 ;


//设置 带宽 性能参数较重要
socket.setPerformancePreferences(1, 10, 1);


6. 上面的延迟和带宽的性能是互斥的 , 延迟低 , 就意味着很小的包就要发送一次 , 其带宽就低了 , 延迟高了 , 每次积累很多数据才发送 , 其带宽就相应的提高了 ;


7. 函数原型 :


 

/**
     * Sets performance preferences for this socket.
     *
     * <p> Sockets use the TCP/IP protocol by default.  Some implementations
     * may offer alternative protocols which have different performance
     * characteristics than TCP/IP.  This method allows the application to
     * express its own preferences as to how these tradeoffs should be made
     * when the implementation chooses from the available protocols.
     *
     * <p> Performance preferences are described by three integers
     * whose values indicate the relative importance of short connection time,
     * low latency, and high bandwidth.  The absolute values of the integers
     * are irrelevant; in order to choose a protocol the values are simply
     * compared, with larger values indicating stronger preferences. Negative
     * values represent a lower priority than positive values. If the
     * application prefers short connection time over both low latency and high
     * bandwidth, for example, then it could invoke this method with the values
     * {@code (1, 0, 0)}.  If the application prefers high bandwidth above low
     * latency, and low latency above short connection time, then it could
     * invoke this method with the values {@code (0, 1, 2)}.
     *
     * <p> Invoking this method after this socket has been connected
     * will have no effect.
     *
     * @param  connectionTime
     *         An {@code int} expressing the relative importance of a short
     *         connection time
     *
     * @param  latency
     *         An {@code int} expressing the relative importance of low
     *         latency


目录
相关文章
|
3月前
|
存储 弹性计算 监控
阿里云渠道商:如何挑选阿里云服务器配置?
本文详解通用型、计算型、内存型等实例适用场景,结合性能评估与成本优化策略,助力用户按需选择。以日均1万访问企业网站为例,2核4G+3M带宽月费约200元,性价比高。合理配置更省钱。
|
3月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
266 11
|
3月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
244 1
|
3月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
260 1
|
4月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
211 0
|
4月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
390 16
|
5月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。

热门文章

最新文章