欢迎来到 GeneXus问答,任何有关GeneXus的技术问题都可以在这里提问,你将会收到社区其他成员的回答。

可查看GeneXus资源列表获取有关GeneXus信息

提问说明:
问题描述尽量清晰明了,建议按如下格式提问
版本:GeneXus15U11
环境:.net/java
运行:web/sd
现象:xx
描述:xx

请尽可能说明碰到的问题,如果问题不合规,管理员会删除该提问,多次违规将禁用账号。

WebNotification如何使用?通过WebSocket发送消息并接收?

0 投票
版本:GeneXus15U11
环境:.net/java
运行:web
描述:怎么通过WebNotification实现发送和接收消息?
最新提问 8月 9 分类:GeneXus Demo | 用户: bob.guo (8,930 分)

1个回答

0 投票

摘要:

      WebNotification的目的是允许实时地执行动作,以便服务器在不被客户端请求的情况下向浏览器发送内容。
      因此,用户不需要刷新Web浏览器以实时获取信息。例如在线聊天/消息系统和监控控制台。

      基于WebSocket实现,Wiki文档:WebNotifications external object

      可以使用WebNoification将通知从服务器发送到客户端。
      GeneXus不支持从客户端向服务器发送通知(没有相应的API),但是外部应用程序可以发送这些通知,GeneXus能够接收和处理传入的消息。

      可以查看Wiki详细说明:HowTo: Receiving and processing a notification message from an external app

XPZ:

      Demo_WebNotification.xpz

说明:

  1. 导入xpz
    导入成功后可以看到如下结构
  2. 基本说明
    1) Server发送消息
    WebNotification对象有Notify、NotifyClient、Broadcast、NotifyClientText方法用于发送消息,示例如下:
    &NotificationInfo.Id = 'clientId'
    &NotificationInfo.Message = 'notificationMessage'
    &WebNotification.Broadcast(&NotificationInfo)

     
    2) Client接收消息
    使用OnMessage事件接收消息,示例如下:
    Event OnMessage(&NotificationInfo)
          if (&NotificationInfo.Id='MSG')
                //processs the notification data
          endif
    Endevent

     
    3) 处理外部消息
    要接收外部消息,需要设置WebNotifications Provider属性为In Process,处理类型有4种,Received Handler、Open Handler、Close Handler、Error Handler
  3. 结构说明
    对照上图可以看到procedure就是对应的Handler,MainProgramsGenerateObjects的作用,是将这些处理过程调用,以便GeneXus生成对应代码
  4. Server发送及Client接收消息
    发送消息时,需要知道相应的clientId(Broadcast广播类型发送给全部client),获取clientId通过ClientInformation.Id来获取
    运行并访问WSMain页面,可以看到如下结果:

    打开新的浏览器,访问WSClientA页面:
    再打开一个新的浏览器,访问WSClientB页面:
    在WSMain页面填写Send Message并发送:
    可以看到所有Client都接收到了消息
  5. 接收并处理外部消息
    在GeneXus中设置好Web Notifications的各个Handler之后,外部对象连接WebScoket的地址分别是:
    NET: ws://<server>/<BaseURL>/gxwebsocket.svc?<client_Id>
    JAVA: ws://<server>/<BaseURL>/gxwebsocket?<client_Id>

    模拟一个外部连接,结果如下:
    可以看到[ZhangSan] Connected的连接提示信息

    然后模拟发送一条信息,结果如下:
    可以看到发送的消息被接收并处理
  6. 示例展示
    一个聊天室的简单应用
最新回答 8月 9 用户: bob.guo (8,930 分)
...