【问题标题】:JS: Chat Timeout Functionality after X messages in a timeframeJS:时间范围内 X 条消息后的聊天超时功能
【发布时间】:2021-10-20 04:27:13
【问题描述】:

所以我必须做一个聊天垃圾邮件功能。当用户发送消息时,我想检查它是否是用户在 30 秒时间范围内发送的第 15 条消息。如果是,我想给用户一个“超时”1分钟,这样他就不能再写消息了。

我已经为此苦苦挣扎了一段时间,但找不到一个好的最佳实践答案。提前致谢。

【问题讨论】:

    标签: javascript timeout chat message


    【解决方案1】:
    const contexts = new WeakMap()
    
    const onSubmit = event => {
      const { target } = event
      const context = contexts.get(target)
      const now = Date.now()
    
      event.preventDefault()
      
      if (context.timeout > now) {
        return
      }
    
      context.timeout = now + 60000
      // fetch
    }
    
    contexts.set(form, { timeout: 0 })
    form.addEventListener('submit', onSubmit)
    

    而且,在上下文中,您还可以存储消息计数器等,以便能够在您的侦听器中对其进行测试。

    【讨论】:

      【解决方案2】:

      我解决了。这是我的解决方案:

      var chatIsTimedOut = false;
      var canWrite = true;
      var msgsIn30s = 0;
      var chatMsgStarted = false;
      
      function addMsg() {
          if (msgsIn30s > 4 && canWrite) {
              console.log("timeout begin");
              canWrite = false;
              chatIsTimedOut = true;
              setTimeout(() => {
                  canWrite = true;
                  chatIsTimedOut = false;
                  msgsIn30s = 0;
                  console.log("tmieout away");
              }, 60000);
          } else if (canWrite) {
              msgsIn30s++;
              if (!chatMsgStarted) {
                  chatMsgStarted = true;
                  setTimeout(() => {
                      chatMsgStarted = false;
                      msgsIn30s = 0;
                  }, 30000);
              }
          }
      
          console.log("Msgs: ", msgsIn30s);
          console.log("Can Write: ", canWrite);
      }
      

      【讨论】:

        猜你喜欢
        • 2015-09-09
        • 1970-01-01
        • 2021-02-07
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 2021-07-18
        • 1970-01-01
        相关资源
        最近更新 更多