Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在专用通道上发送推送事件_Javascript_Ruby On Rails_Ruby_Pusher - Fatal编程技术网

Javascript 在专用通道上发送推送事件

Javascript 在专用通道上发送推送事件,javascript,ruby-on-rails,ruby,pusher,Javascript,Ruby On Rails,Ruby,Pusher,我在Pusher上做了一些测试,在文档之后,我为私有通道创建了一个身份验证方法,身份验证工作正常 文件: 这是我使用JSONP订阅频道时使用的脚本: <script> Pusher.logToConsole = true; var pusher = new Pusher('<%= ENV['PUSHER_KEY'] %>', { cluster: 'us2', encrypted: true, authTransport: 'jsonp',

我在Pusher上做了一些测试,在文档之后,我为私有通道创建了一个身份验证方法,身份验证工作正常

文件:

这是我使用JSONP订阅频道时使用的脚本:

<script>
  Pusher.logToConsole = true;
  var pusher = new Pusher('<%= ENV['PUSHER_KEY'] %>', {
    cluster: 'us2',
    encrypted: true,
    authTransport: 'jsonp',
    authEndpoint: '/pusher_jsonp_auth',
  });

  var channel = pusher.subscribe("private-channel_test");
  channel.bind('pusher:subscription_succeeded', function() {
    console.log("PVT channel");
  });
  channel.bind('greet', function(data) {
    console.log(data);
  });
</script>
在后端,我使用套接字id触发了该通道的事件: 使用ruby pusher gem,我发送了如下消息:

Pusher.trigger('private-channel_test', 'greet', {greet: 'hello world'}, {socket_id: "163.232688"})
事件被发送到“确定”推送器,如调试控制台上所示:

但是前端没有接收到事件,并且当使用socket_id时,bind函数从不运行,Pusher将这些事件视为API消息

有人知道我做错了什么吗


此代码是否与此相关,或者我对所谓的专用频道的理解是错误的?

看起来您将用户从广播中排除,如上所述

尝试从触发器调用中删除第四个参数:

Pusher.trigger('private-channel_test', 'greet', {greet: 'hello world'})

看起来您正在将您的订户从广播中排除,如上所述

尝试从触发器调用中删除第四个参数:

Pusher.trigger('private-channel_test', 'greet', {greet: 'hello world'})

leesio如果我这样做,我将向订阅该频道的所有人广播一个事件。我想要的是直接触发一个事件到一个频道,并确保只有经过身份验证的用户才能接收该事件。@AndreDurao在您的示例中,您将向所有订阅者广播事件,但指定的套接字除外!因为您的频道是私有的,所以只有经过身份验证的用户才能订阅。恐怕无法将事件广播到单个套接字。如果要向各个客户端广播事件,一种方法是为每个客户端分配自己的专用频道。leesio如果这样做,我将向订阅该频道的所有人广播事件。我想要的是直接触发一个事件到一个频道,并确保只有经过身份验证的用户才能接收该事件。@AndreDurao在您的示例中,您将向所有订阅者广播事件,但指定的套接字除外!因为您的频道是私有的,所以只有经过身份验证的用户才能订阅。恐怕无法将事件广播到单个套接字。如果要将事件广播到各个客户机,一种方法是为每个客户机分配自己的专用频道。