commandLoader=\
完整的配置如下:
type=\SuperSocket.SocketEngine\ serverTypeName=\ ip=\ maxConnectionNumber=\ commandLoader=\ type=\SuperSocket.QuickStart.IronSocketServer\ type=\ names=\ 确保所有的程序集在你的工作目录都存在 所需的文件如下: * Microsoft.Dynamic.dll * Microsoft.Scripting.dll * IronPython.dll * SuperSocket.Dlr.dll 实现你的命令 现在, 如果你有一个命令行协议的服务器实例 \而且我们要用 Python 创建一个 \命令用于让两个整数相加,然后把计算结果返回给客户端, 我们就要完成下面的步骤: 1.创建 python 脚本文件 \, 并书写如下内容: def execute(session, request): session.Send(str(int(request[0]) + int(request[1]))) 2.将此文件放入工作目录的子目录 \里 3.WorkRoot -> Command -> ADD.py 4.启动服务器,并通过Telnet客户端验证功能 telnet 127.0.0.1 2012 Client: ADD 100 150 Server: 250 你会发现 ADD.py 位于 Command 文件夹的根目录, 因此 SuperSocket 允许所有实例加载它. 如果你只想要服务器实例 \使用它, 你应该把脚本文件放到Command目录的子目录 \里面: WorkRoot -> Command -> IronPythonServer -> ADD.py 动态命令的更新 SuperSocket每5分钟检查一次Command文件夹的更新. 如果你有任何包括新增,更新,删除的命令文件的操作, SuperSocket 将会在 5 分钟之内应用这些改动. 为动态命令增加命令过滤器 由于我们无法像 C# 中一样方便的将 CLR 属性添加到 Python 文件或者函数中,因此我们需要定义一个函数 \用于将命令过滤器方会给 CLR 运行时. ADD.py def getFilters(): return [LogTimeCommandFilter(), LoggedInValidationFilter()] def execute(session, request): session.Send(str(int(request[0]) + int(request[1]))) SuperSocket 中的日志功能 关键字: 日志, 日志接口, Log4Net, 自定义日志, 扩展日志, 企业库日志 SuperSocket 中的日志系统 当 SuperSocket boostrap 启动时,日志系统将会自动启动。 所以你无须创建自己的日志工具,最好直接使用SuperSocket内置的日志功能。 SuperSocket 默认使用log4net作为第三方日志框架。 所以如果你熟悉log4net,你就能非常容易的使用和自定义SuperSocket的日志功能。 SuperSocket 还提供了基本的 log4net 配置文件 log4net.config/log4net.unix.config, 你需要把它放到程序运行目录的子目录\。 这个 log4net 配置定义了多个 loggers 和 appenders 将所有日志分类输出到 \目录下的四个文件: info.log debug.log err.log perf.log 你也可以根据你自己的需要定制这个配置文件。 由于SuperSocket项目对log4net的弱引用,log4net.dll不会自动输出到你的项目,所以你需要手动引用log4net。(请务必使用SuperSocket提供的log4net版本) 日志接口 SuperSocket的日志功能非常简单,你几乎可以在任何地方都能记录日志。 AppServer 和 AppSession 都有Logger属性, 你可以直接用它来记录日志。 以下代码演示了日志接口的使用: A - /// /// PolicyServer base class /// public abstract class PolicyServer : AppServer ...... /// /// Setups the specified root config. /// /// protected override bool Setup(IRootConfig rootConfig, IServerConfig config) { m_PolicyFile = config.Options.GetValue(\ if (string.IsNullOrEmpty(m_PolicyFile)) { if(Logger.IsErrorEnabled) Logger.Error(\ return false; } return true; } ...... } B - public class RemoteProcessSession : AppSession protected override void HandleUnknownRequest(StringRequestInfo requestInfo) { Logger.Error(\ } } 扩展你的 Logger SuperSocket 允许你自定义你的 Logger。 例如,你如果想要把你的业务操作日志保存到一个独立的地方,你仅需要在log4net配置文件中添加一个新的 logger 并为这个 logger 设置相应的 appender(假设你默认使用log4net): 然后在代码中创建这个logger实例: var myLogger = server.LogFactory.GetLog(\使用除 log4net 之外的日志框架 SuperSocket 支持你通过接口实现自己的log factory: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SuperSocket.SocketBase.Logging { /// /// LogFactory Interface ///