轻量级开发的成功秘诀,第 9 部分: 基于 Continuation 的框架
2009-11-11 00:00:00 来源:WEB开发网
清单 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
更多精彩
赞助商链接