SuperSocket 1.5 Documentation译文 15 -----执行您的动态语言命令
动态语言实现你的命令
动态语言启用SuperSocket
有如下步骤:
-
添加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>
-
为DLR添加
commandLoader(命令加载器
);<SuperSocket> ...... <commandLoaders> <add name="dynamicCommandLoader" type="SuperSocket.Dlr.DynamicCommandLoader, SuperSocket.Dlr"/> </commandLoaders> </superSocket>
-
给你的服务器实例使用(
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中添加两个整数,然后发送回结果给客户端,我们应该按照以下步骤:
-
创建一个python脚本文件名为为“ADD.py”下面的内容:
def execute(session, request): session.Send(str(int(request[0]) + int(request[1])))
-
把这个文件放到子目录“(Command)命令”工作目录
WorkRoot -> Command -> ADD.py
-
启动服务器,并通过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分钟内的变化。