用动态语言实现你的命令

    步骤如下:

    • 添加 DLR (dynamic language runtime) 配置片段;

    Section 定义:

    1. <languages>
    2. <language extensions=".py" displayName="IronPython"
    3. type="IronPython.Runtime.PythonContext, IronPython"
    4. names="IronPython;Python;py"/>
    5. </languages>
    6. </microsoft.scripting>
    • 增加 DLR 命令加载器;
    1. <SuperSocket>
    2. ......
    3. <commandLoaders>
    4. <add name="dynamicCommandLoader" type="SuperSocket.Dlr.DynamicCommandLoader, SuperSocket.Dlr"/>
    5. </commandLoaders>
    6. </superSocket>
    • 为你的服务器实例启用该命令加载器:

    完整的配置如下:

    1. <?xml version="1.0"?>
    2. <configuration>
    3. <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
    4. <section name="microsoft.scripting" requirePermission="false"
    5. type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting"/>
    6. <appSettings>
    7. <add key="ServiceName" value="SupperSocketService" />
    8. </appSettings>
    9. <connectionStrings/>
    10. <superSocket>
    11. <servers>
    12. <server name="IronPythonServer"
    13. serverTypeName="IronPythonService"
    14. ip="Any" port="2012"
    15. maxConnectionNumber="50"
    16. commandLoader="dynamicCommandLoader">
    17. </server>
    18. </servers>
    19. <serverTypes>
    20. <add name="IronPythonService"
    21. type="SuperSocket.QuickStart.IronSocketServer.DynamicAppServer, SuperSocket.QuickStart.IronSocketServer" />
    22. </serverTypes>
    23. <commandLoaders>
    24. </commandLoaders>
    25. </superSocket>
    26. <microsoft.scripting>
    27. <languages>
    28. <language extensions=".py" displayName="IronPython"
    29. type="IronPython.Runtime.PythonContext, IronPython"
    30. names="IronPython;Python;py"/>
    31. </languages>
    32. </microsoft.scripting>
    33. <startup>
    34. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    35. </startup>
    36. </configuration>

    所需的文件如下: Microsoft.Dynamic.dll Microsoft.Scripting.dll IronPython.dll SuperSocket.Dlr.dll

    • 创建 python 脚本文件 "ADD.py", 并书写如下内容:
    1. def execute(session, request):
    2. session.Send(str(int(request[0]) + int(request[1])))
    • 将此文件放入工作目录的子目录 "Command" 里

    • 启动服务器,并通过Telnet客户端验证功能
    1. telnet 127.0.0.1 2012
    2. Client: ADD 100 150
    3. Server: 250

    你会发现 ADD.py 位于 Command 文件夹的根目录, 因此 SuperSocket 允许所有实例加载它. 如果你只想要服务器实例 "IronPythonServer" 使用它, 你应该把脚本文件放到Command目录的子目录 "IronPythonServer" 里面: