PubNub — отправить сообщение о подключении «добро пожаловать»

#javascript #pubnub

#javascript #pubnub

Вопрос:

Каков наилучший способ обработки отправки сообщения непосредственно пользователю после подключения к сокету?

По сути, «Слово дня: Frog», но отправляется только тому пользователю, который только что подключился.

Я предполагаю, что они присоединятся к global каналу, а также к каналу, который соответствует их uuid beholden-trans-am . Все пользователи анонимны (это общедоступный поток на веб-сайте)

Спасибо за любые указания!

Комментарии:

1. Откуда приходит это приветственное сообщение? Вы могли бы просто жестко запрограммировать это в обратном вызове состояния addListener. При статусе подключения отобразите приветственное сообщение. Вы можете использовать веб-ссылки присутствия, и ваш сервер получит это событие присоединения, а затем опубликует приветственное сообщение на канале, к которому только что присоединился пользователь, или на своем личном канале, чтобы его получал только этот пользователь. Итак, есть несколько разных способов, просто зависит от ваших требований здесь. Вы проходили через приложение JS Quickstart? pubnub.com/docs/platform/quickstarts/javascript

2. Подробнее о веб-крючках присутствия… pubnub.com/docs/platform/presence/presence-webhooks

Ответ №1:

Жесткий код в событии состояния подключения

Если вы просто хотите говорить «добро пожаловать» каждый раз, когда клиент подключается к новому каналу, вы можете просто жестко запрограммировать это сообщение в PNConnectedCategory событие обратного вызова статуса, например:

 status: function(event) {
  if (event.category == 'PNConnectedCategory') {
    displayMessage('Welcome to channel, : '   event.affectedChannels);
  }
}
  
  • Если вы подписываетесь на несколько каналов одновременно, все эти каналы будут в affectedChannels собственности.
  • displayMessage это пользовательская функция, которую вы реализуете, которая отображает сообщение где-то в вашем пользовательском интерфейсе. Этот код был извлечен из приложения PubNub JavaScript Quickstart, поэтому вы можете использовать его для быстрого начала работы 🙂

Обработка веб-узлов присутствия на стороне сервера

По сути, это то же самое решение, но с вашего сервера. Вы можете использовать веб-ссылки присутствия, чтобы ваш сервер получал уведомления, когда подписчик присоединяется к каналу ( join событие присутствия) на любом канале.

Ваш серверный код (пример узла здесь) будет выглядеть примерно так:

 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" amp;amp; 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 и предоставьте полную информацию о том, что вы пытаетесь сделать, и обратитесь к этому сообщению SO, если оно применимо.