• 关于异步调用Discuz!NT接口


    最近在做Discuz!NT论坛与网站整合的东西,于是便用到了Discuz提供的Discuz! Toolkit

    看了看源码,应该说这是个不错的工具库,提供了关于注册、登录、 文章、积分等论坛操作的一篮子功能,而且配备了对应的Wiki

    只可惜,Discuz!NT终归是异构的系统,响应速度和突发异常并非如自己的代码一样可控,使用同步方式调用API就显得有那么些不智了

    好在Toolkit是开源的,可以DIY,看看它提供的同步访问Web Service方法:

    Discuz.Toolkit.Util.GetResponseBytes

    要进行异步的调用,原本的同步流程会被切成两部分:

    1、调用开始等待响应

    2、响应触发调用完成。

    演化成语言:一个方法以委托的方式,在这两部分之间传递,第1部分会将方法指针(委托)塞入请求里,在流程执行到第2部分时,方法被取出回调。

    先设计委托原型:

    public delegate void GetResponseGeneric<T>(T objects);
    异步请求数据结构:
    RequestState

    扩展一下Util工具类,加上异步调用接口方法:

    异步方法
    至此,与Discuz!NT的异步交互功能提供完成,怎么使用呢? 
    假设需要异步获取某一版块指定数量的贴子,可以在DiscuzSession添加一个这样的方法:
    Discuz.Toolkit.DiscuzSession.GetTopicListBegin

    调用方使用起来只需要定义好接收方法,剩下就是收数据(CacheObjectCollection.HomepageTopicList是一个缓存项的getter/setter):

    调用方

    到此,异步调用框架完成,个人感觉很好。只是,需求变化成了生成静态页面,它便成了鸡肋……

    Creative Commons License
    本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议
    欢迎转载,但必须保留文章的署名老莫的帐本子
    并保留此链接:http://moye.cnblogs.com/
    如有疑问请发邮件:moyerock@gmail.com
  • 相关阅读:
    无符号数和有符号数字操作的一些注意事项
    C/C++的基本数据类型
    GoLang字符串比较(二)
    Sphinx使用指南
    GoLang字符串比较(一)
    并发与调度亲和性
    golang scheduler工作窃取
    g0
    如何将markdown转换成微信公众号中支持的html
    goroutine是如何被回收的
  • 原文地址:https://www.cnblogs.com/moye/p/discuznt_toolkit_async_api.html
Copyright © 2020-2023  润新知