首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 5与Pusher私下聊天

Symfony 5与Pusher私下聊天
EN

Stack Overflow用户
提问于 2021-09-21 14:44:25
回答 1查看 284关注 0票数 1

我用Symfony 5创建了一个简单的群聊应用程序,现在我正在尝试用Pusher添加Socket

目前它正在运行,但由于我使用的是单个channel,每次用户发布消息时,该消息都会出现在每个会话中。这就是为什么我想在messaging_id中通过channel name,但它不起作用。

我在channel name上读到了我应该使用前缀channel name的文档,但是控制台要求我对用户进行解析,我不知道如何做到这一点,因为我的用户已经连接了。

下面是我的逻辑控制器

代码语言:javascript
复制
 // Pusher
        $options = array(
            'cluster' => 'eu',
            'useTLS' => true
        );
        $pusher = new Pusher(
            'ba75523bee28d7c644f2',
            '9597b6daf0fb4e20fda2',
            '1266737',
            $options
        );

        //New message
        $message = new Message();
        $form = $this->createForm(MessageType::class, $message);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $message->setAuthor($user);
            $message->setMessaging($messaging);
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($message);
            $entityManager->flush();

            $data = $message->getContent();

            if ($pusher->trigger('my-channel', 'my_event', $data)) {
                echo 'success';
            } else {
                header('', true, 403);
                echo 'error';
            }

            return new JsonResponse(Response::HTTP_OK);
        }

以下是我的Javascript

代码语言:javascript
复制
Pusher.logToConsole = true;

var pusher = new Pusher('ba75523bee28d7c644f2', {
    cluster: 'eu',
});

var channel = pusher.subscribe('my-channel');

channel.bind('my_event',
    function (data) {
        console.log(data);
        $('.lala').append('<li class = "chat-left"><div class="chat-text">' + data + '</div>');
    });

channel.bind('pusher:subscription_succeeded', function (members) {
    console.log('successfully subscribed!');
});

function ajaxCall(ajax_url, ajax_data) {
    $.ajax({
        type: "POST",
        url: ajax_url,
        dataType: "json",
        data: ajax_data,
        success: function (response) {
            console.log(response);
        },
        error: function (msg) { }
    });
}

如果我使用private-前缀:在这里输入图像描述,下面是错误

总之,我希望每条消息只出现在好的会话中(消息当然保存在数据库中的正确会话中)。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-21 14:55:48

您不必使用私有频道来进行每次聊天,但这确实是有意义的--这将使您能够确保聊天中唯一的用户能够订阅该频道(从而接收消息)。

接收到的错误消息似乎表明您的auth端点上的代码出现了错误。您可以在api/身份验证-用户/上找到auth过程的详细信息和auth端点代码的示例。

如果您使用的是PHP库,那么生成auth令牌所需的代码是详细的在吉顿回购公司。这将需要响应auth请求而返回。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69270964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档