zoukankan      html  css  js  c++  java
  • 客户端(android,ios)与服务器通信

    android,ios客户端与服务器通信
    为了便于理解,直接用PHP作为服务器端语言

    其实就是一个 http请求响应的过程序,
    先从 B/S模式说起
    浏览器发起http请求,服务器响应请求,并把数据返回给浏览器,经过浏览器的渲染,即为我们所看到的效果

    客户端(android,ios)
    android通过 httpClient或urlconnection等网络请求去实现http请求,(相当于浏览器,发送 url请求),即访问服务器,
    服务器响应请求,并把结果返回给客户端,经过客户端渲染,即为我们看到的效果.

    ios通过 NSURLRequest,NSURLConnection,AFNetworking等网络请求去实现 http请求,(相当于浏览器,发送 url请求),
    即访问服务器,服务器响应请求,并把结果返回给客户端,经过客户端渲染,即为我们看到的效果.

    以上客户端请求过程中,客户端开发与服务器开发制定一种规则,例如:服务器说,我把响应的数据格式为 json或xml,
    让你们客户端自己去渲染样式,就这样完成了基本的请求.

    再从保持会话状态来说:
    先从 B/S模式说起
    浏览器请求服务器时,会把 cookie(浏览器没有禁止情况下)的相关信息通过 header发送到服务器,这个是浏览器访问
    服务器时,默认把这个信息发过到服务器的,所以在php服务器端可以直接用 $_COOKIE来提取信息。
    这里又说一下 cookie,session之间保持会话的原理。

    当第一次访问一个网站时(假如之前没有访问过,或者清除干净相关 cookie),服务器会自动生成一个 session会话,
    并保存在服务器,会话的相关信息有 session_name(),session_id(),
    (假设用默认的session机制,即 session_name() == PHPSESSID),
    然后把 session_name(), session_id(),返回给浏览器,并保存在 cookie中,其中,session_name()的值(即PHPSESSID)
    作为 cookie的名称,session_id()的值作为 cookie的值,此时就建立了浏览器和服务器的会话标识.当浏览器再次请求时,
    就会把cookie相关信息发送到 服务器端中,服务器通过获取cookie信息,对比session相关信息,如果对应的,就说明是同
    一个标识请求,这样就建立了会话标识状态.


    再从客户端(android,ios)
    其实就是模拟 cookie与 session的机制
    因为客户端没有 cookie这种东西(有也可以不用,即这里当作没有),每次请求时,服务器可以生成 session,但是无法以
    cookie的方式保存在客户端,困惑就在这里?假设用户初次安装,或者清空过相关信息。可以这样和客户端设定规则,
    就是设置一个标识,这里,我们叫 token,客户端首次访问时,传递过来的 token为空,服务器接收客户端发起的请求后,
    发现token为空,所以就在服务器生成一个唯一的 token,并保存在服务器端(可以选择保存在数据库,memcached,redis等),
    接着把响应的内容返回给客户端,同时把 token也一起传递过去,客户端收到 token以后,就可以更新 token值,当客户端
    再次请求时,也把 token传递过来,服务器接受请求,并解析 token,与服务器的对比,如果存在,则更新token生存时间,
    并认为是同一个用户请求,就这样,建立了一个会话标识。相当于cookie与session对比一样。至于token在客户端是如何保存
    的,其实客户端有自己的机制,比如说,客户端可以生成一个文件,然后把token值保存在里面,每次请求时,就读取一下这个
    文件,并取值去请求服务器,就这样建立连接了.

    以上说得比较笼统。就如是cookie一样,token会有生命周期。那么如何才能像cookie一样设置token生效周期呢。其实原理是
    一样的,就是当客户端请求服务器时,每次都更新服务器token的效期。服务器返回给客户端时,客户端也每次更新
    token有效期,就这样保持 token的有效期.

    以下模拟一个客户商购物的流程,把 token,用户id(userId)放在数据库(单独的一个表,如:token_table)中,
    同时把购物车产品也放在数据库(另一个表中如:cart_table)中.允许用户没有登陆情况下,添加产品到购物车。
    当用户添加产品到购物车时,把token传递过去,以后就用 token作为标识了,每次客户端请求时,
    同时也把token传递给服务器,以判断是同一个用户。假如设置当用户提交订单时,则要登陆,此时,
    检查token_table表,通过 token字段对比,如果 userId为空,则表示此用户没有登陆,此时返回信息给客户端,
    通知用户登陆,接着用户登陆,通过传递的信息,如果登陆成功,则更新 token_table表的userId字段,表明登陆成功,
    并返回成功状态给客户端,此时就建立了登陆状态,此时,如果涉及到在服务器中的订单提交,支付等信息,
    一般都会用 userId作为标识,此时,就得用 token去查询 token_table表,从中取出 userId,就这样即可完成相关的操作.

  • 相关阅读:
    C语言 数组排序 – 冒泡法排序
    类加载过程
    布隆过滤器的原理及应用
    回答两个被频繁问到的代码写法问题
    关于分布式事务的理解
    根据使用者反馈,对开源项目 go-gin-api 新增两个功能
    图书速度 | 《如何高效学习》
    报错kernel:NMI watchdog: BUG: soft lockup
    容器Jenkins中运行docker
    容器Jenkins中运行docker
  • 原文地址:https://www.cnblogs.com/lin3615/p/4764169.html
Copyright © 2011-2022 走看看