2

我使用 perform javascript 调用在服务器上执行操作,如下所示:

subscription.perform('action', {...});

但是,据我所见,似乎没有内置的javascript“成功”回调,即让我知道该操作在服务器端结束(或可能失败)。我正在考虑在动作结束时发送广播,如下所示:

def action(data)
  ...do_stuff
  ActionCable.server.broadcast "room", success_message...
end

但所有订阅此“房间”的客户都会收到该消息,可能会导致误报。此外,据我所知,消息顺序不能保证,因此此操作中的先前广播可能会在成功消息之后传递,可能会导致进一步的问题。

对此有任何想法还是我完全错过了什么?

4

2 回答 2

4

查看https://github.com/xtian/action-cable-js/blob/master/dist/cable.jshttps://developer.mozilla.org/en-US/docs/Web/API/WebSocket #send()perform只是执行WebSocket.send()并返回true或false,无法知道您的数据是否到达。(这似乎是 WebSockets 做不到的。)

您可以尝试仅使用 http 调用(我建议使用 jbuilder 设置 api),或者确实广播回成功消息。

您可以通过在服务器上创建时间戳,将其与消息一起发送,然后使用 Javascript 对消息进行排序来解决消息的顺序。

祝你好运!

于 2016-07-20T21:27:26.497 回答
0

也许您正在寻找的是trasmit方法:https ://api.rubyonrails.org/v6.1.3/classes/ActionCable/Channel/Base.html#method-i-transmit

它向正在为通道处理的当前连接发送消息。

于 2021-03-18T14:43:24.103 回答