Pubnub отправляет сообщения несколько раз - PullRequest
0 голосов
/ 08 мая 2018

Я использую ReactJs для создания приложения чата с pubnub. Проблема в том, что мое первое сообщение отправляется 1 раз, второе отправляется дважды, а третье отправляется 3 раза. Что может быть не так, вот мой код. Нужно ли отписываться в какой-то момент? Сообщение не просто отображается несколько раз, оно фактически отправлено.

class App extends Component {
    constructor(props) {
        super(props);
        this.pubnub = new PubNub({
            publishKey: 'demo',
            subscribeKey: 'demo',
        });
        this.sendMessage = this.sendMessage.bind(this);

    }
    sendMessage() {
        this.pubnub.publish({
            channel: "simple-chat",
            message: {
                text: this.state.currentMesage,
                sender: this.pubnub.getUUID()
            }
        });

        this.setState({
            currentMesage: ''
        });

        this.pubnub.subscribe({
            channels: ['simple-chat'],
            withPresence: true
        });
        this.pubnub.addListener({
            message: (evt) => {
                console.log('you have got a message:' + JSON.stringify(evt));
                this.state.messages.push({
                    text: evt.message.text
                })
                this.setState({
                    messages: this.state.messages
                });
            }
        });
    }

export default App;

1 Ответ

0 голосов
/ 08 мая 2018

Я считаю, что это не дублирование публикации. Я думаю, что вы «повторно подписываетесь» на один и тот же канал снова и снова… при публикации «снова и снова», поэтому при каждой новой подписке вы получаете все сообщения, которые были опубликованы на этом канале (например, «История»). )

Итак, 1st publish->subscribe-> 1 message 2nd publish->subscribe-> 2 messages 3rd publish->subscribe-> 3 messages И так далее ...

  1. Ваш initNub PubNub должен быть глобальным и / или лучше управлять вызовами подписки / публикации.
  2. Пожалуйста, используйте UUID и установите для него статическое значение

Лучший, Avi.

...