ホームページ  >  記事  >  WeChat アプレット  >  WeChat パブリック プラットフォームの開発: リクエスト メッセージの重複排除

WeChat パブリック プラットフォームの開発: リクエスト メッセージの重複排除

高洛峰
高洛峰オリジナル
2017-02-27 13:34:092574ブラウズ

情報要求メッセージの到着率を確保するため、WeChatサーバーは応答メッセージ(ResponseMessage)を時間内に受信できない場合、同じ要求メッセージ(RequestMessage)を複数回送信します。MsgIdなどを含むすべてのテキストコンテンツは、の一貫した。

このメカニズムは、ネットワーク状態が悪い場合などのメッセージ返信の成功率を保証しますが、サーバーの負荷やリクエストの処理自体が完了するまでに数秒かかる場合、複数のメッセージが繰り返されることでサーバーに負担がかかる場合もあります。ビジネスとデータへの影響。

この状況に対応して、SDK は MessageHandler を使用するときに次の文を追加するだけで済みます:

messageHandler.OmitRepeatedMessage = true;//启用消息去重功能
/// <summary>
 /// 最简化的处理流程(不加密)
 /// </summary>
 [HttpPost]
 [ActionName("MiniPost")]
 public ActionResult MiniPost(string signature, string timestamp, string nonce, string echostr)
 {
     if (!CheckSignature.Check(signature, timestamp, nonce, Token))
     {
         return new WeixinResult("参数错误!");//v0.8+
     }
 
     var messageHandler = new CustomMessageHandler(Request.InputStream, null, 10);
 
     messageHandler.OmitRepeatedMessage = true;//启用消息去重功能
 
     messageHandler.Execute();//执行微信处理过程
 
     return new FixWeixinBugWeixinResult(messageHandler);
 }

重複排除の原理は、現在のリクエストメッセージと前のリクエストをコンテキストを通じて判断することです。現在のユーザーのメッセージの MsgId が一致しているかどうかを確認し、一致している場合は下向きの実行を終了します。

ファイル: Senparc.Weixin.MessageHandlers.MessageHandler.cs

public virtual void OnExecuting()
{
    if (OmitRepeatedMessage && CurrentMessageContext.RequestMessages.Count > 1)
    {
        var lastMessage = CurrentMessageContext.RequestMessages[CurrentMessageContext.RequestMessages.Count - 2];
        if (lastMessage.MsgId != 0 && lastMessage.MsgId == RequestMessage.MsgId)
        {
            CancelExcute = true;//重复消息,取消执行
        }
    }
}


WeChat パブリック プラットフォーム開発の詳細については、メッセージの重複排除関連の記事をリクエストしてください。PHP 中国語 Web サイトにご注意ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。