如何在web中实现类似异步IO
实现对话式的web应用程序。我想实现的逻辑需要多次对话完成。就像填一个登录表单,每次只填一项,提交一次。大概的形式如下:
--- 第一次请求和响应 --- (客户端)--> “我要登录” “请输入用户名” <--(服务器端) --- 第二次请求和响应 --- (客户端)--> “myname” “请输入密码” <--(服务器端) --- 第三次请求和响应 --- (客户端)--> “password” “登录成功” <--(服务器端)
一次完整的业务是有多次连续的请求完成的,可以理解成三个请求是一个事务。当然用session记录每一次提交的,来操作也是可以的。但我看了一些关于异步IO的文章,是不是可以实现异步方式,第一次请求的时候启动一个handle,等待以后几次请求,凑齐用户名和密码在返回登录结果。
def process_request(request): request_handle(request) def request_handle(request): wait_for_next_request(request):
浏览sf时发现一个关于微信的问题,和我问的一样:http://weixin.segmentfault.com/q/1010...
二楼说实现一个状态机,我可以将每一次的请求都存到数据库中,这和我想的“存到session”中是一个道理。
关于1楼的回答,因为这个应用是微信公众平台的后台部分,所以前端不是一个简单的浏览器,所以没法“使用cookie”或者“在客户端保存几步的信息一并提交”。
另外怎么联系@SegmentFault 的人,我想把这个问题转到“微信子站”去
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果能从backend所用的语言和framework上入手会简单得很多。
很多(不怎么流行的)web framework都是基于continuation的,比如Smalltalk的Seaside,Python的Nagare,等等。这些framework通常都利用了语言本身提供的保存当前continuation的功能,使得服务器端的函数可以在运行中途暂时停止,将函数运行的状态serialize到数据库中,等前端返回新的信息时再将保存的函数状态恢复,继续运行。这样做的好处是运行的流程没有受到太大的影响,程序员可以很容易地就适应这种写法。
另一种不需要语言和framework支持的方式则需要刻意将每一步的状态都保存到数据库里。这样做的话,可以通过session或者其他的方式来保存状态。缺点是代码写起来不那么符合一般运行的流程,不够直观。
你问题中的示例情景,建议以:前端与用户交互问答,保存用户回答数据,到最后一步一次性提交的方式来实现。
如果在每次问答都需提交验证一次数据的场景中,我们就得知道:web client 与 server 的交互是无状态的,因此,服务端对客户端的身份识别,必然需要一个凭证,来做为双方数据交互的基础。这个凭证可以使用 cookie 来保存,让真正的数据保存在服务端。
你也可以这么做,把数据保存在JS对象中,到最后一步来验证
我好奇的是微信里面怎么采用session来存储信息?session虽然把信息存储在服务器端,但是识别用户还是需要一个sessionid的,而这个sessionid要么存在cookies里面,要么是在URL当中。可是微信客户端既没有cookies,也没有URL……