2 Star 1 Fork 0

zhrun8899 / learning-notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Cindy 3.0a4 configuration.md 8.03 KB
一键复制 编辑 原始数据 按行查看 历史

Cindy 3.0a4 configuration


Global configuration

net.sf.cindy.config (default: config.properties) Cindy config file net.sf.cindy.enableJmx (default: false) Enable jmx support net.sf.cindy.disableInnerException (default: false) Disable inner exception dispatch

Buffer configuration

net.sf.cindy.bufferCache (default: net.sf.cindy.buffer.DefaultBufferCache) BufferCache class name net.sf.cindy.useDirectBuffer (default: false) Use direct buffer instead of heap buffer net.sf.cindy.useLinkedBuffer (default: false) Use linked buffer instead of memory copy

Dispatcher configuration

net.sf.cindy.dispatcher (default: net.sf.cindy.session.dispatcher.DefaultDispatcher) Dispatcher class name net.sf.cindy.dispatcher.keepAliveTime (default: 3000) Dispatcher keep alive time net.sf.cindy.dispatcher.capacity (default: 1000) Dispatcher capacity (flow control)

Session configuration

net.sf.cindy.session.timeout (default: 0) Session timeout (like SO_TIMEOUT) net.sf.cindy.session.recvBufferSize (default: -1) SO_RCVBUF net.sf.cindy.session.sendBufferSize (default: -1) SO_SNDBUF net.sf.cindy.session.reuseAddress (default: false) SO_REUSEADDR net.sf.cindy.session.tcpNoDelay (default: true) TCP_NODELAY net.sf.cindy.session.soLinger (default: -1) SO_LINGER net.sf.cindy.session.readPacketSize (default: 8192) Session read packet size net.sf.cindy.session.nio.reactor (default:net.sf.cindy.session.nio.reactor.DefaultReactor) NIO Reactor class name

Acceptor configuration

net.sf.cindy.acceptor.backlog (default: 100) Acceptor backlog net.sf.cindy.acceptor.reuseAddress (default: false) SO_REUSEADDR

how to

specify configuration in system environment

For example, to enable jmx, use direct buffer, set dispatcher keep alive time to 10s and enable acceptor reuse address, you can specify configuration in system environment :

-Dnet.sf.cindy.enableJmx=true -Dnet.sf.cindy.useDirectBuffer=true -Dnet.sf.cindy.dispatcher.keepAliveTime=10000 -Dnet.sf.cindy.acceptor.reuseAddress=true

put cindy.properties on your classpath:

enableJmx=true useDirectBuffer=true dispatcher.keepAliveTime=10000 acceptor.reuseAddress=true

cibdy NIO来进行异步操作,基本上就是以下三种模型:

    1. 1 Worker/1 Dispatcher
    1. 1 Worker/n Dispatcher
    1. m Worker/n Dispatcher[/list:u] Cindy的默认设置是第一种,即用一个线程来处理所有的连接。应用在SessionListener中监听相应的事件,在处理过程中耗时非常长的话,会影响到其他的网络连接。 如果采用第二种模型,则可以通过Session.setDispatcher(Dispatcher),比如每个Session置一个独立的Dispatcher线程。这样SessionListener中进行长时间处理也不会影响到其他的网络连接。 如果要采用第三种模型,除开setDispatcher以为,还需要通过 Session.setEventGenerator(EventGenerator)来设置事件生成器。比如可以若干个Session共用一个 EventGenerator,另外的若干Session共用另一个。 这三种模型之间进行选择并不会影响用户的业务逻辑处理,可以在最后进行性能调优时,在具体情况下进行测试,再进行调节即可。

socket 参数 backlog

服务端socket处理客户端socket连接是需要一定时间的。ServerSocket有一个队列,存放还没有来得及处理的客户端Socket,这个队列的容量就是backlog的含义。如果队列已经被客户端socket占满了,如果还有新的连接过来,那么ServerSocket会拒绝新的连接。也就是说backlog提供了容量限制功能,避免太多的客户端socket占用太多服务器资源。 客户端每次创建一个Socket对象,服务端的队列长度就会增加1个。


setsockopt中参数之SO_REUSEADDR的意义

1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。

SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态

2、SO_REUSEADDR和SO_REUSEPORT

SO_REUSEADDR提供如下四个功能:

SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。

SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。

SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。

SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言(TCP不支持多播)。

SO_REUSEPORT选项有如下语义:

此选项允许完全重复捆绑,但仅在想捆绑相同IP地址和端口的套接口都指定了此套接口选项才行。

如果被捆绑的IP地址是一个多播地址,则SO_REUSEADDR和SO_REUSEPORT等效。

使用这两个套接口选项的建议:

在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项;

当编写一个同一时刻在同一主机上可运行多次的多播应用程序时,设置SO_REUSEADDR选项,并将本组的多播地址作为本地IP地址捆绑。

if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,

(const void *)&nOptval , sizeof(int)) < 0) ...

Q:编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思?

A:这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。

一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使用SO_REUSEADDR 选项。【2】 

cindy 错误

Exception in thread "Reactor-4" java.lang.IllegalStateException: can't change the state of a completed future at net.sf.cindy.session.DefaultFuture.setSucceeded(DefaultFuture.java:159) at net.sf.cindy.session.nio.AbstractChannelSession$ChannelReactorHandler.onDeregistered(AbstractChannelSession.java:228) at net.sf.cindy.session.nio.reactor.DefaultReactor.dispatchDeregistered(DefaultReactor.java:168) at net.sf.cindy.session.nio.reactor.DefaultReactor.changeDeregister(DefaultReactor.java:280) at net.sf.cindy.session.nio.reactor.DefaultReactor.deregister(DefaultReactor.java:183) at net.sf.cindy.session.nio.AbstractChannelSession.close(AbstractChannelSession.java:142) at net.sf.cindy.session.nio.AbstractChannelSession$ChannelReactorHandler.onReadable(AbstractChannelSession.java:254) at net.sf.cindy.session.nio.reactor.DefaultReactor.processSelectedKeys(DefaultReactor.java:355) at net.sf.cindy.session.nio.reactor.DefaultReactor.afterSelect(DefaultReactor.java:293) at net.sf.cindy.session.nio.reactor.DefaultReactor$1.run(DefaultReactor.java:130) at java.lang.Thread.run(Unknown Source)

1
https://gitee.com/zhrun8899/learning-notes.git
git@gitee.com:zhrun8899/learning-notes.git
zhrun8899
learning-notes
learning-notes
master

搜索帮助