为了账号安全,请及时绑定邮箱和手机立即绑定

实现对话式的web应用程序,我想实现的逻辑需要多次对话完成,求指点。

实现对话式的web应用程序,我想实现的逻辑需要多次对话完成,求指点。

RISEBY 2023-05-02 13:09:02
就像填一个登录表单,每次只填一项,提交一次。大概的形式如下:   --- 第一次请求和响应 ---(客户端)-->   “我要登录”                      “请输入用户名”  <--(服务器端)         --- 第二次请求和响应 ---(客户端)-->   “myname”                      “请输入密码”  <--(服务器端)--- 第三次请求和响应 ---(客户端)-->   “password”                       “登录成功”  <--(服务器端)一次完整的业务是有多次连续的请求完成的,可以理解成三个请求是一个事务。当然用session记录每一次提交的,来操作也是可以的。但我看了一些关于异步IO的文章,是不是可以实现异步方式,第一次请求的时候启动一个handle,等待以后几次请求,凑齐用户名和密码在返回登录结果。def process_request(request):     request_handle(request)def request_handle(request):     wait_for_next_request(request):
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

如果能从backend所用的语言和framework上入手会简单得很多。

很多(不怎么流行的)web framework都是基于continuation的,比如Smalltalk的Seaside,Python的Nagare,等等。这些framework通常都利用了语言本身提供的保存当前continuation的功能,使得服务器端的函数可以在运行中途暂时停止,将函数运行的状态serialize到数据库中,等前端返回新的信息时再将保存的函数状态恢复,继续运行。这样做的好处是运行的流程没有受到太大的影响,程序员可以很容易地就适应这种写法。

另一种不需要语言和framework支持的方式则需要刻意将每一步的状态都保存到数据库里。这样做的话,可以通过session或者其他的方式来保存状态。缺点是代码写起来不那么符合一般运行的流程,不够直观。


查看完整回答
反对 回复 2023-05-04
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

你问题中的示例情景,建议以:前端与用户交互问答,保存用户回答数据,到最后一步一次性提交的方式来实现。

如果在每次问答都需提交验证一次数据的场景中,我们就得知道:web client 与 server 的交互是无状态的,因此,服务端对客户端的身份识别,必然需要一个凭证,来做为双方数据交互的基础。这个凭证可以使用 cookie 来保存,让真正的数据保存在服务端。

你也可以这么做,把数据保存在JS对象中,到最后一步来验证

  //状态对象
  var obj = {    a1: false,    a2: false,    a3: false
  }  //绑定用户输入完成事件,提交数据
  $.ajax({    url: "http://ooxx.cn/a1",    success:function(a1){
      obj.a1 = a1
    }
  });

  $.ajax({    url: "http://ooxx.cn/a2",    success:function(a2){
      obj.a2 = a2
    }
  });

  $.ajax({    url: "http://ooxx.cn/a2",    success:function(a3){
      obj.a2 = a3;      //验证有效性
      if(obj.a1 && obj.a2 &&obj.a3){        console.log('ok');
      }
    }


查看完整回答
反对 回复 2023-05-04
  • 2 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信