PubNub - 发送 "welcome" 连接消息

PubNub - send a "welcome" connection message

在用户连接到套接字后直接向用户发送消息的最佳方式是什么?

基本上是“今日词汇:青蛙”,但只发送给刚刚连接的用户。

我的假设是他们将加入 global 频道以及与其 uuid beholden-trans-am 相匹配的频道。用户都是匿名的(这是网站上的 public 流)

感谢指点!

连接状态事件中的硬编码

如果您只想在每次客户端连接到新频道时说“欢迎”,您可以将该消息硬编码到状态回调的 PNConnectedCategory 事件中,如下所示:

status: function(event) {
  if (event.category == 'PNConnectedCategory') {
    displayMessage('Welcome to channel, : ' + event.affectedChannels);
  }
}
  • 如果您一次订阅多个频道,那么所有这些频道都将在 affectedChannels 属性.
  • displayMessage 是您实现的自定义函数,可在 UI 中的某处显示消息。此代码是从 PubNub JavaScript Quickstart app 中提取的,因此您可以使用它来 快速入门 :)

Presence Webhook 服务器端处理

这基本上是相同的解决方案,但来自您的服务器。您可以利用 Presence Webhooks 以便在订阅者加入任何频道上的频道(存在 join 事件)时通知您的服务器。

您的服务器代码(此处为 Node 示例)将如下所示:

app.post("/myapp/api/v1/wh/presence", (request, response) => {
    var event = request.body;
    console.info('entering presence webhook for uuid/user: ' + event.uuid);

    if ((!event) || (!event.action) || (!event.uuid)) {
        console.info("could not process event: " + JSON.stringify(event));
        response.status(200).end();
        return;
    }
    if (event.action === "join") {
        console.info(event.uuid + " has join " + event.channel);
////////////////////////////////////////////////////////
// THIS IS WHERE YOU ADD YOUR WELCOME MESSAGE CODE
////////////////////////////////////////////////////////
      pubnub.publish({
        channel : event.channel,
        message : {'welcome' : "Welcome to channel, " + event.channel}
      },
      function(status, response) {
        // success/error check code goes here
      });
    }

    if (event.action === "state-change" && event.state) {
        console.info("state changed for " + event.uuid 
            + " new state " + event.state);
    }

    if ((event.action === "leave") || (event.action === "timeout")) {
        console.info(event.uuid + " has left or isn't reachable");
        // use pubnub.wherenow() if needed.
    }

    response.status(200).end();
});

发布警告

如果您发布到用户刚刚加入的频道并且有其他用户订阅了该频道,那么每个人都会收到该欢迎消息,因此您可能希望将消息发布到只有加入用户的频道已订阅。这应该是一些众所周知的“私人”频道(至少对您的服务器而言是众所周知的)。也许这个频道是用户的UUID,所以你可以这样发布消息:

pubnub.publish({
    channel : event.uuid, // use the UUID as the channel name
    message : {'welcome' : "Welcome to channel, " + event.channel}
},

进一步协助

我希望这能让您对如何实现它有所了解。如果您还有其他问题,请联系 PubNub Support 并提供有关您尝试执行的操作的完整详细信息,并在适用时参考此 SO post。