节点服务器信息,节点信息及消息处理(广播与组播)

01.节点服务器.服务器中间件属性提取 ==> TSysReporter (参考19.系统状态报告)

   a.节点综合运行状态获取; ==> 用于节点服务管理器等工具;

      ** 取节点服务器的运行状态:  FetchNodeStatus(TQBParcel)

        1  ConnectToParent

        2  OnlineSonNodes

        3  AllSonNodes

        4  ActiveConnections

        5  AllConnections

        6  OnlineUsers

        7  AllUsers

        8  ActiveTaskSessions

        9  ActiveTaskSockets

        10  ActiveAddrSessions

        11  ActiveAddrSockets

        12  MessageSources

        13  UserGroups

        14  ScheduleTasks

        15  PluginModules

        16  ApplicationDatabases

        17  DBPools

        18  DBTransactions

        19  PageQuerySessions

        20  IdGeneratingItems

        21  SystemAuthorized

        22  LicenseCompany

        23  LicenseUser

        24  NodeDateTime

        25  MachineCode

        26  UserSiteCode

        27  WebSessions

        28  WebSocketSessions

        29  ActiveCachedFiles

        30  FileCacheSize

      ** 取远程节点服务器的工作参数: FetchNodeParameters(TQBParcel)

          StringGoods('DefaultDir')          系统服务所在文件夹

          StringGoods('SelfFileName')         系统服务程序文件名

          StringGoods('ServiceName')          系统服务名

          StringGoods('DisplayName')          系统服务显示名

          StringGoods('ServiceDesc')          系统服务描述信息

          IntegerGoods('RequestTimeout')        请求接收超时秒数

          IntegerGoods('HeartbeatSeconds')       用户会话心跳包周期

          IntegerGoods('MaxRequestLength')       最大请求长度

          IntegerGoods('MaxUsersAllowed')       最大允许的用户数

          IntegerGoods('BackupDays')          备份消息的保存天数

          BooleanGoods('SaveU2UMessages')       是否为离线用户备份U2U消息

          BooleanGoods('SaveBroadcastMessages')    是否为离线用户备份群发消息

          IntegerGoods('WebPort')            Web服务端口

          BooleanGoods('WebServiceEnabled')      Web服务是否开启

          StringGoods('WebHomeDir')           Web主页默认路径

          StringGoods('WebDefaultFilename')      Web默认首页文件名称

          StringGoods('WebDynamicPageExt')       Web动态页面扩展名

          BooleanGoods('WebGZipEnabled')        WEB服务的GZip开启否

          BooleanGoods('WebStaticGZipEnabled')     Web服务的静态GZip压缩开启否

          IntegerGoods('WebMaxRequestHeader')     Web最大请求头

          IntegerGoods('WebMaxRequestData')      Web最大请求数据

          IntegerGoods('WebRequestTimeout')      Web最大请求超时量

          BooleanGoods('FileCacheEnabled)        Web文件缓冲是否启用

          IntegerGoods('FileCacheSize'         Web文件缓冲区最大值

          IntegerGoods('FileSizeThreshold)       Web缓存文件大小阀值

          IntegerGoods('FileAliveMinutes')       Web缓存文件存活时间

          BooleanGoods('WebSocketEnabled')       WebSocket服务是否开启

          IntegerGoods('WebSocketHeartbeat')      WebSocket心跳包周期:秒数

          BooleanGoods('LoadBalanceEnabled')      负载均衡启用否

          BooleanGoods('WebDispatchEnabled')      Web负载均衡启用否

          IntegerGoods('BalancePort')          负载均衡消息组播端口号

          RealGoods('ThisNodeFactor')          本节点性能加权值

   b.检测节点服务器是否在线;

      HelloNode

   c.取中间件版本

      GetServiceVersion

   d.取服务器系统时间

      GetServerDateTime

   e.取授权情况

      GetExpireDates(是否授权,一级授权过期时间,二级授权过期时间)  

02.关于节点服务器数据信息的处理(参考5.节点管理控件)

   a.从根结点提取子节点列表信息:   FetchNodeList(CDS,InCludeRootNode:Boolean=False) 

   b.在根结点上注册一个新的子结点: AddNode()

   c.修改一个子节点的属性: UpdateNode()

   d.注销一个子节点: RemoveNode()

   e.取一个节点的属性

   --------------

   本属性可方便的实现对所有连锁店业务的处理

03.消息回调传输 (服务端引用 NodeServiceAPI.pas) + TMsgPoster

   a.向单个用户发送消息

     客户端发送: 目标用户ID = UserID+'@'+UserNodeID

     服务端调用: PluginToUser(入参包,目标用户ID,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverOneUserMessage

     **常量描述: 消息类别(MsgType).Demo中传的值是 1

     ---------------------------------------------------

     这一项停用  ==> TMsgPoster.PostToOneUser(目标用户ID,要发送的包)

   b.向某个节点的所有用户发送消息

     客户端发送: 目标节点标识ID,用户类别(Demo中为0),群发方式(Demo中为1)

                目标节点标识ID=目标节点的UserNodeID

     服务端调用: PluginToNodeUsers(入参包,目标节点标识ID,用户类别,群发方式,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverMultiUserMessage

     **常量描述: 用户类别.Demo中 0:表示所有用户

                 群发方式.Demo中: 1-群发给用户 2-LAN广播 3-LAN组播 4-UDP单播

                 消息类别.Demo中传的 1

     ---------------------------------------------------

     这一项停用 ==> TMsgPoster.PostToNodeUsers(目标节点标识ID,用户类别(0),要发送的包)

                    ==> TMsgPoster.PostToNodeConnections(目标节点标识ID,要发送的包)

   c.发送给所有连接

     客户端发送: 目标节点标识ID

     服务端调用: PluginToAllConnections(入参包,目标节点标识ID,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverAllConnectionsMessage

     **常量描述: 消息类别(MsgType).Demo中传的值是 5

     ---------------------------------------------------

            ==> TMsgPoster.PostToAllUsers(用户类型(0),要发送的包)

            ==> TMsgPoster.PostToAllNodeConnections(要发送的包)

   d.向单个连接发送消息

     客户端发送: 目标节点标识ID,目标连接ID(UserConn.ConnectionId)

     服务端调用: PluginToConnection(入参包,目标节点标识ID,目标连接ID,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverOneConnectionMessage

     **常量描述: 消息类别(MsgType).Demo中传的值是 1

     ---------------------------------------------------

            ==> TMsgPoster.PostToConnection(目标节点标识I,目标连接ID,要发送的包)

   e.异步回调

     客户端发送: 目标节点标识ID,目标连接ID(UserConn.ConnectionId)

     服务端调用: PluginCallback(入参包,目标节点标识ID,目标连接ID,要发送的包)

     客户端接收: TMsgReceiver.ReceiverOneConnectionMessage 

   ---------------------------------------------------

     这一项停用

   f.指定整数绑定值消息发送

     客户端发送: 目标节点标识ID,绑定的整数标识值

     服务端调用: PluginToIntPropConnections(入参包,目标节点标识ID,绑定整数值,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverIntPropConnectionsMessage

     **常量描述: 消息类别(MsgType).Demo中传的值是 7

    ------------------------------------------------------------

        ==> TMsgPoster.PostToIntPropConnections(目标节点,绑定数字属性,发送的包)

   g.指定字符串绑定值消息发送

     客户端发送: 目标节点标识ID,绑定的字符串标识值

     服务端调用: PluginToIntPropConnections(入参包,目标节点标识ID,绑定字符串值,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverStrPropConnectionsMessage

     **常量描述: 消息类别(MsgType).Demo中传的值是 8

     ------------------------------------------------------------

        ==> TMsgPoster.PostToStrPropConnections(目标节点,绑定字符属性,发送的包)

   h.指定角色标识消息发送

     客户端发送: 目标节点标识ID,绑定的角色标识值(字符型)

     服务端调用: PluginToRoleIdConnections(入参包,目标节点标识ID,绑定角色值,要发送的包,消息类别)

     客户端接收: TMsgReceiver.ReceiverRoleIdConnectionsMessage

     **常量描述: 消息类别(MsgType).Demo中传的值是 9

    ------------------------------------------------------------

        ==> TMsgPoster.PostToRoleIdConnections(目标节点,绑定角色属性,发送的包)

    

04.TMsgPoster的UDP广播与组播

   a.单节点广播

     广播:TMsgPoster.OneNodeBroadcast(目标节点标识ID,广播端口,要发送的包)

     接收:TBurroUDP.OnDataReceived

          1).设置tmpStr:AnsiString,用于接收广播过来的消息 SetLength(tmpStr,接收长度);

          2).取消息: TBurroUDP.ReadBuffer(tmpStr);

          3).将接收的内容转为数据包: TQBParcel.LoadFromString(tmpStr);

   b.所有节点广播

     广播:TMsgPoster.AllNodeBroadcast(广播端口,要发送的包)

     接收:与单节点广播接收一样

   c.单节点组播

     组播:TMsgPoster.OneNodeMulticast(目标节点标识ID,组播IP,组播端口,要发送的包)

     接收:TUDPServer.OnUdpData

          1).从函数提供的指针及内容长度,接收信息 MoveBuffer(Buffer^,tmpStr[1],RecvSize)

          2).TQBParcel.LoadFromString(tmpStr)

   d.所有节点组播

     组播:TMsgPoster.AllNodeMulticast(组播IP,组播端口,要发送的包)

     接收:TUDPServer.OnUdpData

          1).从函数提供的指针及内容长度,接收信息 MoveBuffer(Buffer^,tmpStr[1],RecvSize)

          2).TQBParcel.LoadFromString(tmpStr)

   e.单节点单播

     组播:TMsgPoster.OneNodeUnicast(目标节点ID,电脑名称,端口,要发送的包)

原文地址:https://www.cnblogs.com/jieling/p/5884443.html