WEB开发网
开发学院软件开发Java 轻量级开发的成功秘诀,第 9 部分: 基于 Continua... 阅读

轻量级开发的成功秘诀,第 9 部分: 基于 Continuation 的框架

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 清单 2. 载入循环并通过代码调用循环prompt<c=loop1234现在就可以调用 continuation,在 i 被置为 2 并输出后跳出循环:prompt<c.call34非常令人惊讶,轻量级开发的成功秘诀,第 9 部分: 基于 Continuation 的框架(3),时光


清单 2. 载入循环并通过代码调用循环

prompt< c=loop 
1 
2 
3 
4 

现在就可以调用 continuation,在 i 被置为 2 并输出后跳出循环:

prompt< c.call 
3 
4 

非常令人惊讶,时光倒流了,回到了捕获 continuation 的时候。这一有趣的抽象对于某些问题来说是非常有用的。

Web 服务器中的 continuation

若您出于某些原因希望挂起操作并在随后不需要时跳出操作,那么 continuation 尤为有用。但这不恰恰就是 Web 应用程序的特点吗?处理用户的请求、存储状态、要求用户提供更多信息,然后等待。当用户再次调用 Web 服务器时(可能是几分钟之后),就需要转向状态字典、读取用户响应,然后继续处理。就这样循环反复。

如果有 continuation,那么就可以创建一个 continuation 对象,使用惟一 ID 生成器存储该对象,并请求用户提供更多信息。通常的应用服务器代码形式如下:


清单 3. 应用服务器代码
def ask_user(webpage_id) 
 id=Id_genrator.new_id 
 continuation=callcc... 
 continuations[id]=continuation 
 load_user_webpage(id, screen_id) 
end 

(请注意,这并非真正的框架 —— 只是展示基于 continuation 的应用服务器中主要细节形式的代码而已。)

然后 Web 服务器即可处理其他 Web 请求。当用户提交页面并指定您传递给该用户的 ID 时,就可恢复 continuation 并继续执行处理。Web 服务器的代码形式如下:


清单 4. Web 服务器代码
while(True) do 
 request=get_latest_request() 
 if request.is_a_new_request do 
  start_new_app(request) 
 else 
  continuation=continuations[request.id] 
  continuation.call(request) 
 end 
end 

上一页  1 2 3 4 5  下一页

Tags:轻量级 开发 成功

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接