Pubnub 一对一聊天向所有用户发送消息

Pubnub One to One Chat Sending Message to all users

这是我的 Pubnub 聊天代码

 var pubnub = PUBNUB.init({
    publish_key   : 'my_key',
    subscribe_key : 'sub-key'
});

  pubnub.subscribe({

    channel : "{{$channel}}",

    message : function(m){

     $(".conversation-list").append(
        '<li class="clearfix '+ m.clearifix +' ">' +
        '<div class="chat-avatar">' +
        '<img src="' + m.image + '">'+
        '<i> {{date('h:i')}}  </i>' +
        '</div>' +
        '<div class="conversation-text">' +
        '<div class="ctext-wrap">' +
        '<i> '+ m.name + '</i>' +
        '<p>' + m.message + '</p>' +
        '</div>' +
        '</div>' +
        '</li>'
        ).animate({scrollTop: $(".conversation-list")[0].scrollHeight}, 0);
     $('.reply-text').val('');

 },
     //connect : publish
 });

  $('.send-reply-to-user').on('click', function (e) {
    e.preventDefault();

    if ($('.reply-text').val()== '')
        return false;
    else

        console.log(pubnub.publish);
   // console.log(this);

    var user_to_id = $(".send-reply-to-user").attr('user_to_id');
    var message = $('.reply-text').val();
    var name = $('#user_name').val();
    var image = document.getElementById("user_image").getAttribute("src");
    var clearifix = $('#user_clearifx').val();

    pubnub.publish({
        channel : "{{$channel}}",
        message: { name : name, message : message, image : image, clearifix : clearifix }
    });

    if ($.trim(message).length != 0) {
        $.ajax({
            url: '{{route('send:user:chat:message')}}',
            cache: false,
            method: 'POST',
            data: {user_to_id: user_to_id, message: message, _token: '{{csrf_token()}}'},
            beforeSend: function () {
            },
            success: function (result) {
            }

        })
    }

});

此代码运行良好,唯一的问题是消息将发送给所有用户,我想将消息发送给一对一用户。

Example: User one: John send a message to User two Deo, 
Example 2: John sends a message to Marry

等等。使用 Pubnub JS API,后端为 Laravel 5.6

我建议使用名为 ChatEngine. It takes away a lot of the heavy lifting involved with making chat with PubNub. Here is some example code to get you started making 1:1 private chats. Make sure you use the setup button 的 PubNub 自以为是的 JavaScript 框架来为您的帐户准备后端。

<script src="https://cdn.jsdelivr.net/npm/chat-engine@0.9.5/dist/chat-engine.min.js" type="text/javascript"></script>
<script type="text/javascript">

// Init ChatEngine with PubNub
const publishKey = '__Your_PubNub_Publish_Key__';
const subscribeKey = '__Your_PubNub_Subscribe_Key__';

const ChatEngine = ChatEngineCore.create({
  publishKey,
  subscribeKey,
}, {
  globalChannel: 'global',
});

const user = {
    uuid: 'randomstringofchars',
    name: 'John Smith'
}

const chats = {};

ChatEngine.connect(user.uuid, user);

ChatEngine.on('$.ready', function(data) {

    // store my new user as `me`
    let me = data.me;

    // returns a ChatEngine chat object
    function makePrivateChat(theirUserId) {
        const chatKey = [theirUserId, me.uuid].sort().join('-');

        // Don't make the same 1:1 chat if it already exists
        if (chats[chatKey]) {
            return;
        }

        // true for private chat
        const chat = new ChatEngine.Chat(chatKey, true);

        chats[chatKey] = chat;
    }

    // Auto add a 1:1 chat to UI when invited by someone
    me.direct.on('$.invite', makePrivateChat);

    // Define a button for making new 1:1 chats in your UI
    newOneToOneChatButton.on('click', function (event, theirUserId) {
        someChatObject.invite(theirUserId);
    });
});
</script>

终于解决了我的问题,私人频道运行良好,实际上问题出在我的后端。它从我已修复的所有用户返回数据,现在工作正常。