|
发表于 2007-11-10 20:19:42
|
显示全部楼层
Lua进行分布式对象设计
使用SRP平台(下载网址:http://www.srplab.com),可以支持采用Lua进行分布式对象程序设计。Lua本身不支持对象的概念,SRP平台进行了扩展,使其支持对象;平台内部提供远程过程调用机制,支持客户端远程调用服务器端对象的方法,可以非常容易实现类似Web Service的功能。
一个简单的例子如下:
服务器端程序和注释:
服务器端程序需要srpsdll.dll包支持
require "srpsdll"
srpsdll._InitServer(true,true,false,true,0,3008) --服务器端口使用3008
srpsdll._CreateService( "RemoteCallServer", "123",5,0,0,0,"F0611A16-BFAA-4d0b-803F-807EC63BD265" ) ---创建名称为RemoteCallServer远程服务
--创建服务项目(对象分组)
Service:_CreateSysRootItem("TestItem","")
SrvItem = Service:_GetSysRootItem( "TestItem" )
--创建一个全局对象,对象名称设置为”TestObject”
a = Service:_NewGlobal(SrvItem)
a._Name = "TestObject"
function a:GetNumber( para )
print( "Remote Call Number ",para)
return para + 1
end
srpsdll._MsgLoop() --服务器端消息循环,等待客户端调用
srpsdll._ModuleExit()
客户端程序和注释:
服务器端程序需要srpcdll.dll包支持
require "srpcdll"
--初始化客户端
srpcdll._InitClient()
--连接服务器
ret = srpcdll._SConnect("localhost",3008) --localhost为服务器的地址,或者域名
if ret == 0 then
srpcdll._ModuleExit()
return
end
Service:_WaitSync() --等待服务同步
--连接服务项目(对象分组),并等待同步
Service:_ActiveSysRootItem("TestItem")
SrvItem = Service:_GetSysRootItem("TestItem")
SrvItem:_WaitSync()
--远程调用服务器端对象“TestObject“的方法,GetNumber
print( TestObject:_SRemoteCall(0,"GetNumber",123) )
srpcdll._ModuleExit() |
|