SuperSocket的TcpAsyncSocketListener 稳定性问题

gaozhenxue 发布于 2015/08/07 11:17
阅读 1K+
收藏 0

收藏!数据建模最全知识体系解读!>>>

@江振宇 你好,想跟你请教个问题:江哥你好,我刚刚开始看源码,从SocketEngine开始看起,以前我自己也写过Socket并发服务器用于工业控制,但是对于Socket控制还是有很多问题,现在向您请教:

1、TcpAsyncSocketListener 里面ProcessAccept方法中

willRaiseEvent = m_ListenSocket.AcceptAsync(e);
中进行异常处理,如下代码
try
            {
                willRaiseEvent = m_ListenSocket.AcceptAsync(e);
            }
            catch (ObjectDisposedException)
            {
                //The listener was stopped
                //Do nothing
                //make sure ProcessAccept won't be executed in this thread
                willRaiseEvent = true;
            }
            catch (NullReferenceException)
            {
                //The listener was stopped
                //Do nothing
                //make sure ProcessAccept won't be executed in this thread
                willRaiseEvent = true;
            }
            catch (Exception exc)
            {
                OnError(exc);
                //make sure ProcessAccept won't be executed in this thread
                willRaiseEvent = true;
            }

但是如果监听Socket发生其他异常则这个TcpAsyncSocketListener 实例其实是不再工作的,可是我却没有看到你在使用它的SocketServerBase类里面有任何的对她产生异常停止工作后的重启操作,必定整个服务器引擎入口是TcpAsyncSocketListener ,如果他停止监听则整个服务器就停止工作了。您是如何保证其稳定性的。谢谢。

2、对于Socket长连接KeepAlive你是直接进行设置的

m_ListenSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);

那如何进行KeepAlive的参数设置,例如心跳包的时间间隔设置、重试次数等参数,以及KeepAlive无应答之后Socket连接是否会触发异常自动断开?

谢谢



加载中
0
江振宇
江振宇

1) 监听都不成功,就没必要重试了,因为一般都是环境问题,比如说端口被占用或者没有权限等等,重试是无法解决问题;

2) KeepAlive设置请参考SuperSocket文档, TCP KeepAlive失败当然连接就断开了;

返回顶部
顶部