Mina.NET FAQ

Mina是什么含义?

  • 'Multipurpose Infrastructure for Network Applications'的缩写;
  • 一个妹纸的名字;
  • 日语中的“南”;
  • 西班牙语和葡萄牙语中的'Mine' (as in mineshaft);
  • 查看维基百科

Mina.NET支持哪些传输通道?

Mina.NET目前支持TCP、UDP(基于.NET异步套接字,APM/.NET 2.0,SocketAsyncEventArgs/.NET 4),和串口通讯。

如何构建/运行Mina.NET?

构建Mina.NET需要.NET framework 2.0或以上版本。Mina.NET核心组件依赖以下库:

如何获取帮助?

请访问用户手册,也可以发布issue或讨论。

如何向Mina.NET贡献代码?

你可以贡献任何与Mina.NET相关的内容:示例、常用协议的编解码器、教程、改进、修复、评测等等。在源码页面,点击Fork,提交Pull Requests。

Mina.NET能否...?

能否用Mina.NET创建客户端(或服务端)应用程序?

可以,使用Mina.NET可以创建客户端和服务端程序,分别使用IoConnectorIoAcceptor

Mina.NET能否处理像HTTP这样的文本协议?

可以,请查看示例Reverser。

Mina.NET能否处理复杂的二进制协议?

可以,请查看示例SumUp。

能否用Mina.NET实现需要保持连接的协议?

可以,Mina.NET不会主动关闭任何连接,除非远端结束连接,或者调用了IoSession.Close()。

Mina.NET支持SSL/TLS吗?

是的,Mina.NET支持“即插即用”的SSL/TLS,请参考SSLFilter

我的IoHandler需要实现线程安全吗?

如果你的IoHandler需要在多个会话之间共享数据,那么则需要实现线程安全;如果会话间没有共享数据,只有独立数据(如会话属性中存放的上下文信息),那么则不需要实现线程安全,因为Mina.NET产生的所有事件都会按顺序传递至handler(当使用ExecutorFilter时),在同一会话中,上一条事件尚未处理完成前,新的事件不会被触发。

除了TCP/IP和UDP/IP,Mina.NET还能支持哪些传输通道?

支持几乎所有的传输方式。Mina.NET的API被设计为与传输通道无关,你可以实现任意的传输类型。

怎样实现...?

怎样存储与会话相关的信息?

会话中可以存储自定义属性,这些属性是属于当前会话的特有信息,不会在会话间共享,你可以随时添加或移除自定义属性。

怎样将一个handler分解为多个handler以实现复杂的业务逻辑?

请参考DemuxingIoHandler.

怎样关闭会话并释放连接?

首先关闭会话,然后释放connector。如果先释放connector,所有关联会话将被自动关闭。

什么时候应该将协议处理程序实现为过滤器?

过滤器通常应当是可重用的。通用的业务逻辑(例如身份认证、日志等)可以实现为过滤器,如果是实现复杂的多层协议,可以考虑命名空间Mina.Handler.Chain

发送请求消息后,怎样检测远端没有返回响应消息?

不能直接使用SessionIdle事件。为每个请求定义一个超时定时器,接收到响应后取消计时。

怎样使用我喜欢的日志框架(如log4net)来记录Mina.NET的日志消息?

请参阅 the Common.Logging Manual 中的 'Configuring Logging' 部分。

常见问题

发送的缓冲数据没有被写入会话?

在发送缓冲数据之前,请确保已经调用了IoBuffer.Flip()

为什么SocketConnector将多个消息合并为一个消息发送?

比如,我分别发送了"abc"和"def",但发送出去的消息是"abcdef",这是不是个bug?

不是,这是因为你的系统在尝试更有效地发送数据(参阅Nagle算法)。通过设置ISocketSessionConfig.NoDelay可以启用/禁用Nagle's算法,例如:

((ISocketSessionConfig)connector.SessionConfig).NoDelay = true;

不过,即使这样也并不代表Mina.NET中的一次session.Write(bytes)调用可以等同与网络中的一个TCP数据包。你应当定义自己的IProtocolDecoder来将接收到的字节数据重新组装为消息对象。如果你的协议基于文本行,TextLineCodec将是一个很好的参考。详细示例请参阅SumUp示例。

Last edited Apr 7, 2014 at 3:22 PM by longshine, version 2