MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

    请教:如何写一个这样的复读机(自动提醒,和旧信息保留)

    开发交流
    4
    8
    231
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      kixeb23099 last edited by

      假如, 我们想复读机 可以 指令查询, 指令的结果 取决于是否有 新的消息, 如果没有新的消息,复读机就返回旧的 内容。例如

      甲: 天气,
      复读机:晴. #(因为这是最新的结果来自网络API)
      乙: 天气,
      复读机:晴. #(因为还是天晴没有发生改变)
      复读机:有太阳. #(复读机需要主动提醒, 因为有新的内容来自API)
      乙: 天气,
      复读机:有太阳. #(因为还是天晴没有发生改变)

      大大们这样的复读机, 需要如何造呢?

      1 Reply Last reply Reply Quote 0
      • Samarium150
        Samarium150 ⭐2021⭐ last edited by

        每次收到指令,bot都会查询API(假设API为HTTP),并记下查询者和查询结果,安排定时复查。到时间后或者有再次向API查询的指令则尝试获取更新,如果有更新,则对记录过的查询者发送更新。

        这样如何?

        K 1 Reply Last reply Reply Quote 0
        • RainChan
          RainChan 摸鱼 last edited by

          由于目前的天气API多半不支持主动推送数据的更改,所以只能用缓存解决问题。
          可以在第一次指令执行之后缓存结果,第二次执行直接取出结果发送;过一段时间时候缓存过期重新获取数据

          K 1 Reply Last reply Reply Quote 0
          • K
            kixeb23099 @RainChan last edited by

            @rainchan 目前我们知道这个天晴API是有 自动推送API 功能的, 那么设计会有改变吗?

            1 Reply Last reply Reply Quote 0
            • K
              kixeb23099 @Samarium150 last edited by

              @samarium150 “并记下查询者和查询结果,安排定时复查。” 这个安排定时复查 不是很符合使用场景啊 . API 会自动提醒的呢。

              Samarium150 1 Reply Last reply Reply Quote 0
              • RainChan
                RainChan 摸鱼 last edited by

                有自动推送的话就不需要判断缓存是否过期了

                1 Reply Last reply Reply Quote 0
                • Samarium150
                  Samarium150 ⭐2021⭐ @kixeb23099 last edited by

                  @kixeb23099 有自动提醒就按websocket类似的方法处理囖

                  1 Reply Last reply Reply Quote 0
                  • ryoii
                    ryoii 梦中的鸡翅 last edited by

                    来自曾经redis缓存使用的经验

                    cache 开两个组。一个key 缓存了每个进行过查询的用户,一个key缓存api的查询结果。每次采集或接收到api数据变更,就对缓存的所有用户主动把新的消息推出去

                    • 缓存用户的key要设置过期时间
                    • api结果的缓存可以在每次查询的时候,也可以定时刷新,但在只要触发缓存刷新,就根据你缓存过的用户推消息

                    如果你的天气api可以主动推送,那很好。用户查直接读缓存,缓存更新时根据缓存发用户

                    1 Reply Last reply Reply Quote 0
                    • 1 / 1
                    • First post
                      Last post
                    Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact