国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison Applet WeChat Développement WeChat Développement de la plateforme publique WeChat?: résoudre les problèmes de contexte utilisateur (session)

Développement de la plateforme publique WeChat?: résoudre les problèmes de contexte utilisateur (session)

Feb 27, 2017 pm 01:08 PM
Plate-forme publique WeChat

Aper?u

En raison du mécanisme spécial de la plateforme publique WeChat, toutes les informations sont transmises par le serveur WeChat, de sorte que le serveur ne peut pas utiliser Session pour gérer le contexte de la session utilisateur.

A cet effet, le SDK Senparc.WeiXin.MP ajoute un module contextuel et l'intègre dans le MessageHandler.

WeixinContext

WeixinContext est un conteneur pour toutes les entités de contexte utilisateur unique (MessageContext) (provisoirement appelées contexte global). WeixinContext lui-même n'est pas une classe statique, ce qui signifie que vous pouvez créer plusieurs entités de contexte dans la même application.

En même temps, une instance statique de WeixinContext est placée dans MessageHandler, de sorte que le WeixinContext dans toutes les sous-classes dérivées de MessageHandler IMessageContext, y compris MessageContext déjà fourni dans le SDK).

Ainsi, dans toute instance qui implémente MessageHandler (comme MyMessageHandler), nous pouvons accéder à un objet dont le type et le nom sont WeixinContext.

WeixinContext est utilisé pour enregistrer le contexte de l'utilisateur (MessageContext) et fournit une série de méthodes. Les principales méthodes incluent?:

.

///


/// Réinitialiser tous les paramètres de contexte, tous les enregistrements seront effacés

...
}

Il s'agit d'exploiter le File d'attente TM, supprimez les informations expirées dans le temps et déplacez les derniers objets actifs vers la fin
///

/// Nom d'utilisateur ( OpenId)
??????????????????????????????????????????????????????????????????????????????????????????????????????????>
///
/// Obtenir MessageContext
///

;/param>
// / True?: Si l'utilisateur n'existe pas, créez une instance et renvoyez la dernière instance
/// False?: L'utilisateur est stocké dans, puis renvoyez null
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????}


///
/// Récupérez le MessageContext, s'il n'existe pas, initialisez-en un à l'aide des informations requestMessage et renvoyez l'instance d'origine
// /

///
public TM GetMessageContext(IRequestMessageBase requestMessage)
/// /// Récupérer le MessageContext , s'il n'existe pas, initialisez-en un à l'aide des informations requestMessage et renvoyez l'instance d'origine
///
///
public TM GetMessageContext( IResponseMessageBase réponseMessage)
?????????????????????????????????????????????
/ //
??????????????????????????????????????????????????????????????????????????????????????????????
}

///
/// Enregistrer les informations de réponse
/ //
/// Message de réponse
public void InsertMessage(IResponseMessageBase réponseMessage)
...
}

///
/// Obtenez les dernières données de la demande, si elles n'existent pas, renvoyez Null
///

/// < ;param name="userName">Username (OpenId)<
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????> // /
/// Obtenez les dernières données de réponse, si elles n'existent pas, renvoyez Null
///

///
??????????????????????????????????????????????????????????????????????????????????????,?,????????????????????????????????????????; > }

WeixinContext a deux objets utilisés pour stocker le contexte utilisateur?: MessageCollection et MessageQueue.

L'ensemble des éléments de ces deux objets se chevauchent, mais MessageQueue trie les éléments afin que le contexte le plus expiré soit traité dans le temps.

ExpireMinutes est utilisé pour définir la période de validité du contexte, la valeur par défaut est de 90 minutes. Vous pouvez définir un paramètre n'importe où dans le programme et il prendra effet immédiatement.

PS?: La logique de suppression des données expirées dans MessageQueue fonctionne avec une efficacité extrêmement élevée. Il n'est pas nécessaire de prendre en compte les problèmes d'utilisation du processeur et de conflits d'objets (si le délai de vérification supplémentaire expire) pendant le développement régulier.

MessageContext

MessageContext est utilisé pour enregistrer les informations contextuelles d'un seul utilisateur et est stocké dans les objets MessageCollection et MessageQueue de WeixinContext. IMessageContext est défini comme suit?:

/// <summary>
/// 微信消息上下文(單個(gè)用戶)接口
/// </summary>
/// <typeparam name="TRequest">請(qǐng)求消息類型</typeparam>
/// <typeparam name="TResponse">響應(yīng)消息類型</typeparam>
public interface IMessageContext<TRequest,TResponse>
    where TRequest : IRequestMessageBase
    where TResponse : IResponseMessageBase
{
    /// <summary>
    /// 用戶名(OpenID)
    /// </summary>
    string UserName { get; set; }
    /// <summary>
    /// 最后一次活動(dòng)時(shí)間(用戶主動(dòng)發(fā)送Resquest請(qǐng)求的時(shí)間)
    /// </summary>
    DateTime LastActiveTime { get; set; }
    /// <summary>
    /// 接收消息記錄
    /// </summary>
    MessageContainer<TRequest> RequestMessages { get; set; }
    /// <summary>
    /// 響應(yīng)消息記錄
    /// </summary>
    MessageContainer<TResponse> ResponseMessages { get; set; }
    /// <summary>
    /// 最大儲(chǔ)存容量(分別針對(duì)RequestMessages和ResponseMessages)
    /// </summary>
    int MaxRecordCount { get; set; }
    /// <summary>
    /// 臨時(shí)儲(chǔ)存數(shù)據(jù),如用戶狀態(tài)等,出于保持.net 3.5版本,這里暫不使用dynamic
    /// </summary>
    object StorageData { get; set; }
 
    /// <summary>
    /// 用于覆蓋WeixinContext所設(shè)置的默認(rèn)過期時(shí)間
    /// </summary>
    Double? ExpireMinutes { get; set; }
 
    /// <summary>
    /// AppStore狀態(tài),系統(tǒng)屬性,請(qǐng)勿操作
    /// </summary>
    AppStoreState AppStoreState { get; set; }
 
    event EventHandler<WeixinContextRemovedEventArgs<TRequest, TResponse>> MessageContextRemoved;
 
    void OnRemoved();
}

Vous pouvez créer votre propre classe en fonction de vos besoins, implémenter cette interface et être utilisée par WeixinContext. Bien s?r, si vos besoins ne sont pas si particuliers et que vous êtes paresseux, le SDK fournit une implémentation MessageContext par défaut?:

/// <summary>
/// 微信消息上下文(單個(gè)用戶)
/// </summary>
public class MessageContext<TRequest,TResponse>: IMessageContext<TRequest, TResponse>
    where TRequest : IRequestMessageBase
    where TResponse : IResponseMessageBase
{
    private int _maxRecordCount;
 
    public string UserName { get; set; }
    public DateTime LastActiveTime { get; set; }
    public MessageContainer<TRequest> RequestMessages { get; set; }
    public MessageContainer<TResponse> ResponseMessages { get; set; }
    public int MaxRecordCount
    {
        get
        {
            return _maxRecordCount;
        }
        set
        {
            RequestMessages.MaxRecordCount = value;
            ResponseMessages.MaxRecordCount = value;
 
            _maxRecordCount = value;
        }
    }
    public object StorageData { get; set; }
 
    public Double? ExpireMinutes { get; set; }
 
    /// <summary>
    /// AppStore狀態(tài),系統(tǒng)屬性,請(qǐng)勿操作
    /// </summary>
    public AppStoreState AppStoreState { get; set; }
 
    public virtual event EventHandler<WeixinContextRemovedEventArgs<TRequest, TResponse>> MessageContextRemoved = null;
 
    /// <summary>
    /// 執(zhí)行上下文被移除的事件
    /// 注意:此事件不是實(shí)時(shí)觸發(fā)的,而是等過期后任意一個(gè)人發(fā)過來的下一條消息執(zhí)行之前觸發(fā)。
    /// </summary>
    /// <param name="e"></param>
    private void OnMessageContextRemoved(WeixinContextRemovedEventArgs<TRequest, TResponse> e)
    {
        EventHandler<WeixinContextRemovedEventArgs<TRequest, TResponse>> temp = MessageContextRemoved;
 
        if (temp != null)
        {
            temp(this, e);
        }
    }
 
    /// <summary>
    ///
    /// </summary>
    /// <param name="maxRecordCount">maxRecordCount如果小于等于0,則不限制</param>
    public MessageContext(/*MessageContainer<IRequestMessageBase> requestMessageContainer,
        MessageContainer<IResponseMessageBase> responseMessageContainer*/)
    {
        /*
         * 注意:即使使用其他類實(shí)現(xiàn)IMessageContext,
         * 也務(wù)必在這里進(jìn)行下面的初始化,尤其是設(shè)置當(dāng)前時(shí)間,
         * 這個(gè)時(shí)間關(guān)系到及時(shí)從緩存中移除過期的消息,節(jié)約內(nèi)存使用
         */
 
        RequestMessages = new MessageContainer<TRequest>(MaxRecordCount);
        ResponseMessages = new MessageContainer<TResponse>(MaxRecordCount);
        LastActiveTime = DateTime.Now;
    }
 
    public virtual void OnRemoved()
    {
        var onRemovedArg = new WeixinContextRemovedEventArgs<TRequest, TResponse>(this);
        OnMessageContextRemoved(onRemovedArg);
    }
}

Le code ci-dessus est facile à comprendre en fonction des commentaires. Données de stockage. Il s'agit d'un conteneur utilisé pour stocker toutes les données liées au contexte utilisateur. WeixinContext et IMessageContext n'y font aucune référence. Il appartient entièrement au développeur de déterminer le contenu (comme l'étape franchie par l'utilisateur ou une étape importante). informations de localisation, etc., etc.), similaire au r?le de Session.

La classe MessageContext ci-dessus a fourni des méthodes courantes de traitement des messages relativement complètes et peut être utilisée directement. Si vous avez des besoins plus particuliers et devez personnaliser MessageContext, il est recommandé d'utiliser cette classe comme classe de base pour effectuer les réécritures nécessaires. Par exemple, ce qui suit est une classe de contexte personnalisée?:

public class CustomMessageContext : MessageContext<IRequestMessageBase,IResponseMessageBase>
{
    public CustomMessageContext()
    {
        base.MessageContextRemoved += CustomMessageContext_MessageContextRemoved;
    }
 
    /// <summary>
    /// 當(dāng)上下文過期,被移除時(shí)觸發(fā)的時(shí)間
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void CustomMessageContext_MessageContextRemoved(object sender, Senparc.Weixin.Context.WeixinContextRemovedEventArgs<IRequestMessageBase,IResponseMessageBase> e)
    {
        /* 注意,這個(gè)事件不是實(shí)時(shí)觸發(fā)的(當(dāng)然你也可以專門寫一個(gè)線程監(jiān)控)
         * 為了提高效率,根據(jù)WeixinContext中的算法,這里的過期消息會(huì)在過期后下一條請(qǐng)求執(zhí)行之前被清除
         */
 
        var messageContext = e.MessageContext as CustomMessageContext;
        if (messageContext == null)
        {
            return;//如果是正常的調(diào)用,messageContext不會(huì)為null
        }
 
        //TODO:這里根據(jù)需要執(zhí)行消息過期時(shí)候的邏輯,下面的代碼僅供參考
 
        //Log.InfoFormat("{0}的消息上下文已過期",e.OpenId);
    }
}

CustomMessageContext_MessageContextRemoved(. ) méthode ci-dessus Elle sera déclenchée lorsque le contexte d'un utilisateur sera effacé et vous pourrez ajouter le code dont vous avez besoin. De plus, vous pouvez également remplacer des méthodes telles que OnRemoved() dans l'accumulation ou ajouter d'autres attributs et méthodes.

Pour plus d'articles liés au développement de la plateforme publique WeChat?: résolution des problèmes de contexte utilisateur (session), veuillez faire attention au site Web PHP chinois?!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276