CometD Projectにはチュートリアルを戻すoutstanding taskがあります。
この特定の質問は、サーバ側の株価チュートリアルによって回答されました。このチュートリアルでは、資料の一部としてオンラインに戻すために、ソースhereを見つけることができます。
いくつかの点で言えば、書く必要があるサービスはチュートリアルの株価サービスと似ています。外部イベントを受信すると、サービスはそのイベントをユーザにブロードキャストする必要があります。
@Service
public class StockPriceService implements StockPriceEmitter.Listener
{
@Inject
private BayeuxServer bayeuxServer;
@Session
private LocalSession sender;
public void onUpdates(List<StockPriceEmitter.Update> updates)
{
for (StockPriceEmitter.Update update : updates)
{
// Create the channel name using the stock symbol.
String channelName = "/stock/" + update.getSymbol().toLowerCase(Locale.ENGLISH);
// Initialize the channel, making it persistent and lazy.
bayeuxServer.createChannelIfAbsent(channelName, new ConfigurableServerChannel.Initializer()
{
public void configureChannel(ConfigurableServerChannel channel)
{
channel.setPersistent(true);
channel.setLazy(true);
}
});
// Convert the Update business object to a CometD-friendly format.
Map<String, Object> data = new HashMap<>(4);
data.put("symbol", update.getSymbol());
data.put("oldValue", update.getOldValue());
data.put("newValue", update.getNewValue());
// Publish to all subscribers.
ServerChannel channel = bayeuxServer.getChannel(channelName);
channel.publish(sender, data);
}
}
}
クラスStockPriceEmitter
は、あなたの外部イベントのソースであり、StockPriceEmitter.Update
イベントの形でStockPriceEmitter.Listener
にそれらを公開しています。
外部イベントがCometDサーバーに中継される仕組みは、StockPriceEmitter
が非表示にする詳細です。 JMSメッセージ、外部RESTサービスのポーリング、カスタムネットワークプロトコルのポーリング、データベースのポーリングなどを行うことができます。
重要なことは、外部イベントが到着するとStockPriceService.onUpdates(...)
が呼び出され、そのイベントをCometDのフレンドリーなJSON形式に変換し、CometDチャンネルに公開することができます。
CometDチャネルに公開すると、そのチャネルのすべてのサブスクライバ(通常はブラウザなどのリモートクライアント)にメッセージが送信されます。
CometDチャンネルは、非常に頻繁な更新レート(たとえば、1秒あたり2〜4回の更新)以上でクライアントを爆破するのを避ける方法であるため、遅延型です。です。 特定のユースケースに基づいて、チャンネルの怠惰を判断する必要があります。