Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 如何在rails/actioncable中向除发送者之外的所有客户端发送消息?_Ruby On Rails_Ruby_Websocket_Actioncable - Fatal编程技术网

Ruby on rails 如何在rails/actioncable中向除发送者之外的所有客户端发送消息?

Ruby on rails 如何在rails/actioncable中向除发送者之外的所有客户端发送消息?,ruby-on-rails,ruby,websocket,actioncable,Ruby On Rails,Ruby,Websocket,Actioncable,在socket.io中,您可以向除发送方之外的所有客户端发送消息,如: socket.broadcast.emit('user connected'); 但在rails/actioncable中,如何做到这一点 class BoardChannel < ApplicationCable::Channel def subscribed stream_from "board:#{params[:board]}" end def speak # clie

在socket.io中,您可以向除发送方之外的所有客户端发送消息,如:

socket.broadcast.emit('user connected');
但在rails/actioncable中,如何做到这一点

class BoardChannel < ApplicationCable::Channel
   def subscribed
     stream_from "board:#{params[:board]}"
   end

   def speak
     # client will call @perform('speak')
     result = do_something()
     # how to send 'result' to all client except sender?
   end
 end
class BoardChannel
使用作业,您可以使用部分中的逻辑实现此操作。
在您的模型中,创建记录后,调用作业perform传递自我记录。 请参见下面的“如何使用广播将消息传递到接收的数据(在频道)”

   ...  

   def perform(message)
     ActionCable.server.broadcast "board:#{params[:board]}",
     message: render_message(message)
   end

   private

   def 
     ApplicationController.renderer.render(
       partial: 'messages/message.html.erb',
       locals: { message: message }
     )
   end  
在views/messages/_message.html.erb和代码make中创建一个分部

 <%= if message.sender_id == current_user.id %>
   The code to report that forwarded message.
 <%= else %>
   The code to send the message to all except sender.
 <% end %>

报告转发消息的代码。
将邮件发送给除发件人以外的所有人的代码。

我整个下午都在担心这个问题。一切都准备好了放弃,只是躺在床上,我的脑海里闪现出一个解决它的办法!登录共享

 class BoardChannel < ApplicationCable::Channel
   def subscribed
     stream_from "board:#{params[:board]}"
     stream_from "global_stream"
   end
 end
当然,您也可以向特殊用户广播。你可以:

ActionCable.server.broadcast "board:#{params[:board]}", "some messages"


完美

在上,您可以使用我假设Rails会有类似的功能,可能称为
publish
。。。但我不确定,这里也一样。在前端解决了一个问题,但我不喜欢这个解决方案。每个例子(包括文档)都假设发送者应该收到他发送的事件。后端的另一个解决方法是传递发送方套接字id、拉入客户端、删除发送方,然后使用循环手动向每个客户端广播。您是否尝试过为每个用户使用不同的广播名称?类似于“board:{params[:board]}:{user.id}”中的
stream_
。然后每个用户都会获得自己的流,您可以通过循环将其广播给应该接收流的特定用户。此后没有解决方案?
ActionCable.server.broadcast "board:#{params[:board]}", "some messages"