Fork me on GitHub

SuperSocket 1.5 Documentation译文 15 -----执行您的动态语言命令

动态语言实现你的命令

动态语言启用SuperSocket

有如下步骤:

  1. 添加DLR(动态语言运行时)的配置节点;

    节点定义:

    <section name="microsoft.scripting" requirePermission="false"
         type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting"/>
    <microsoft.scripting>
        <languages>
            <language extensions=".py" displayName="IronPython"
                type="IronPython.Runtime.PythonContext, IronPython"
                names="IronPython;Python;py"/>
        </languages>
    </microsoft.scripting>
  2. 为DLR添加commandLoader(命令加载器);

    <SuperSocket>
        ......
        <commandLoaders>
            <add name="dynamicCommandLoader" type="SuperSocket.Dlr.DynamicCommandLoader, SuperSocket.Dlr"/>
        </commandLoaders>
    </superSocket>
  3. 给你的服务器实例使用(commandLoader):

    <servers>
      <server name="IronPythonServer"
          serverTypeName="IronPythonService"
          ip="Any" port="2012"
          maxConnectionNumber="50"
          commandLoader="dynamicCommandLoader">
      </server>
    </servers>
    

完整的配置文件:

  

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
    <section name="microsoft.scripting" requirePermission="false"
             type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting"/>
  </configSections>
  <appSettings>
    <add key="ServiceName" value="SupperSocketService" />
  </appSettings>
  <connectionStrings/>
  <superSocket>
    <servers>
      <server name="IronPythonServer"
          serverTypeName="IronPythonService"
          ip="Any" port="2012"
          maxConnectionNumber="50"
          commandLoader="dynamicCommandLoader">
      </server>
    </servers>
    <serverTypes>
      <add name="IronPythonService"
       type="SuperSocket.QuickStart.IronSocketServer.DynamicAppServer, SuperSocket.QuickStart.IronSocketServer" />
    </serverTypes>
    <commandLoaders>
        <add name="dynamicCommandLoader" type="SuperSocket.Dlr.DynamicCommandLoader, SuperSocket.Dlr"/>
    </commandLoaders>
  </superSocket>
  <microsoft.scripting>
    <languages>
      <language extensions=".py" displayName="IronPython"
            type="IronPython.Runtime.PythonContext, IronPython"
            names="IronPython;Python;py"/>
    </languages>
  </microsoft.scripting>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
</configuration>

确保所有必需的组件中存在工作目录

这些文件是必需的: * Microsoft.Dynamic.dll * Microsoft.Scripting.dll * IronPython.dll * SuperSocket.Dlr.dll

实现你的命令

现在,如果我们有一个命令行协议SuperSocket服务器实例“IronPythonServer”,我们想创建一个“ADD”命令在Python中添加两个整数,然后发送回结果给客户端,我们应该按照以下步骤:

  1. 创建一个python脚本文件名为为“ADD.py”下面的内容:

    def execute(session, request):
        session.Send(str(int(request[0]) + int(request[1])))
  2. 把这个文件放到子目录“(Command)命令”工作目录

    WorkRoot -> Command -> ADD.py
  3. 启动服务器,并通过telnet验证功能

    telnet 127.0.0.1 2012
    Client: ADD 100 150
    Server: 250

你发现我们把文件ADD.py放在Command文件夹的根目录下,因此SuperSocket允许所有服务器实例加载它。 如果你想只允许为“IronPythonServer”的服务器实例使用它,你应该把这个文件放在 “IronPythonServer” 中的子命令文件夹目录:

WorkRoot -> Command -> IronPythonServer -> ADD.py

更新的动态命令

SuperSocket间隔5分钟检查更新的命令文件夹。因此,如果您有任何命令更新包括添加,更新或删除,SuperSocket将采用您在5分钟内的变化。

posted @ 2013-05-12 19:18  逗豆豆  阅读(337)  评论(0编辑  收藏  举报