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.Listener
в виде StockPriceEmitter.Update
событий.
Как внешние события передаются на сервер CometD - это подробная информация, которую скрывает StockPriceEmitter
; это может быть сделано через сообщения JMS или путем опроса внешней службы REST или с помощью пользовательского сетевого протокола или путем опроса базы данных и т. д.
Важно, чтобы при поступлении внешних событий вызывается StockPriceService.onUpdates(...)
, и там вы можете конвертировать события в формат JSON CometD, а затем публиковать их на канале CometD.
Публикация на канал CometD, в свою очередь, отправит сообщение всем абонентам этого канала, обычно удаленным клиентам, таким как браузеры.
Канал CometD был сделан ленивый, потому что это способ избежать бомбардировки клиентов с очень частой скоростью обновления (скажем, более 2-4 обновлений в секунду). Вам нужно будет решить вопрос о ленивости канала на основе вашего конкретного варианта использования.