【问题标题】:Am I using websockets correctly?我是否正确使用 websockets?
【发布时间】:2017-02-26 16:10:08
【问题描述】:

背景:

  • 我正在使用 Pusher 的 API。
  • 我正在使用 PHP 服务器端。
  • 我已经通过 composer 安装了 Pusher 包服务器端。

我如何使用它

我正在构建一个由单个用户控制的幻灯片。如果我想让那个人为该页面上的所有人更改幻灯片,那么我会使用用户移动到的数字幻灯片进行 AJAX 调用。

$('#nextCard').click(function(){
    if ($('#card-' + (cardId + 1)).length != 0) {  // if there is a next card
        $('#card-' + (cardId)).hide();             // hide current card
        cardId++;                                  // increment the card id
        $('#card-' + (cardId)).show();             // and show the next card
        location.hash = cardId;

        /**
         * make ajax call to push function
         */
        $.ajax({
            method: 'post',
            url: '<?php echo base_url('learn/pusher'); ?>',
            data: {card_id: cardId},
            dataType: 'json',
            async: false,
        });
    }
});

此号码通过 ajax 发送到服务器,并通过推送器进行引导。

Pusher 然后将幻灯片编号实时发送给同一页面上的所有用户...实际上 推送 更改到不同的人的屏幕。​​

var channel = pusher.subscribe('notifications');
channel.bind('new-notification', function(data) {

    // call something here

});

然后,这些更改受数据推送时调用的函数的影响。

我的问题

我的印象是 Websockets 是 AJAX 和其他类似技术的替代品/替代品......但在这里我发现自己依靠 AJAX 将我的 Websockets 数据从服务器端发送到推送器。

我认为 Websockets 比 AJAX 更有优势,因为它更快,但在这里我发现自己受到 AJAX 的限制。

那么我在这里正确使用 websockets 了吗?

【问题讨论】:

  • 为什么不使用 pusher 而不是 ajax 来发布更新?
  • 如果您已经与服务器建立了 webSocket 连接,那么您可以通过 webSocket 连接或通过 Ajax(您的选择)向服务器发送数据。
  • "Websockets 是 AJAX 的替代品/替代品" 不完全是,它的主要优点是双向的,因此服务器可以向客户端发送消息。这意味着 websocket 连接可以重复地替换对服务器的 AJAX 请求以获取最新状态。就我个人而言,即使我有一个打开的 websocket 连接,我仍然使用 AJAX 请求来向我的 HTTP API 发送“一次性”查询。
  • 有趣,我发现 ajax 对于“一次性”事件也更容易。

标签: javascript ajax websocket pusher


【解决方案1】:

使用 AJAX 向您的服务器发送请求,进而触发 Pusher 事件以便将其广播给订阅者是使用 Pusher 的惯用方式。底层 WebSockets 技术是双向的(更多信息here),但 Pusher 的 pub/sub 模型是单向的。

您的用例的另一种选择是使用client events。这允许您直接从客户端触发事件。这样做的额外考虑是您必须使用私人或在线频道。

【讨论】:

  • 绝对成功!
猜你喜欢
  • 2016-01-24
  • 2014-05-15
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
相关资源
最近更新 更多