Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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
Ruby on rails 如何在没有JS的情况下在ActionCable频道中接收数据?_Ruby On Rails_Actioncable - Fatal编程技术网

Ruby on rails 如何在没有JS的情况下在ActionCable频道中接收数据?

Ruby on rails 如何在没有JS的情况下在ActionCable频道中接收数据?,ruby-on-rails,actioncable,Ruby On Rails,Actioncable,我正在编写一个Rails应用程序,它使用WebSocket与其他机器通信(在此过程中没有浏览器和客户端逻辑)。我有一个频道: class MachinesChannel < ApplicationCable::Channel def subscribed ... end def unsubscribed ... end def handle_messages ... end end 我可以通过@perform()方法从JS调用服务器端方

我正在编写一个Rails应用程序,它使用WebSocket与其他机器通信(在此过程中没有浏览器和客户端逻辑)。我有一个频道:

class MachinesChannel < ApplicationCable::Channel
  def subscribed
    ...
  end

  def unsubscribed
    ...
  end

  def handle_messages
    ...
  end
end
我可以通过
@perform()
方法从JS调用服务器端方法

有没有办法省略JS部分,直接在
MachinesChannel
中处理传入的数据


理想的情况是让
handle_messages
方法接受
数据
参数,并对传入数据调用此方法。

查看
ActionCable
源代码后,我得到了以下解决方案。您只需在
MachinesChannel
中创建一个要调用的方法,例如
handle\u messages(data)
。然后,在连接到websocket的客户端中,您需要以以下格式发送消息(ruby中的示例):

action
必须是要在
MachinesChannel
中调用的方法的名称。其余的键值是您想要的。这是您可以在
ActionCable
频道中收到的日期

最近发布了一个gem,它似乎非常适合这种用法。我没有使用过它,所以我不知道它到底是如何工作的。

而不是:

def handle_messages
 ...
end
这对我很有用:

def receive(data)
  puts data
  ...
end

嘿客户是我的宝贝。如果有人对使用有任何疑问,我很乐意提供帮助!:-)
def handle_messages
 ...
end
def receive(data)
  puts data
  ...
end