Короткий ответ заключается в том, что вы можете определить протокол веб-сокета, позвонив yourCometDObject.registerTransport('websocket', new comet.WebSocketTransport())
Длинный ответ для моего случая и node.js Я буду начать с констатации важной информации. Имейте в виду, что я нахожусь в проекте node.js.
В файле cometd. js из репо cometd
, инстанцируя CometD объект вызывает этот блок, добавляя протокол websocket :
if (window.WebSocket) {
this.registerTransport('websocket', new WebSocketTransport());
}
И вот предостережения.
- Node.js не имеет объекта window (имеет смысл, поскольку он сначала рассматривается как серверная структура).
- Существует библиотека
cometd-nodejs-client
, но она не поддерживает протокол websocket , как указано на их странице github. Поэтому добавить его позже с помощью registerTransport('websocket', new WebSocketTransport())
невозможно, поскольку WebSocketTransport не определен в этой библиотеке.
Чтобы использовать websocket в node.js
с cometd
, вам необходимо установить пакет browser-env
и использовать его следующим образом: require('browser-env)();
в вашем модуле. Это позволит обойти окно объект не существующую часть.
После этого становится просто получить код, который я разместил здесь, и добавить то, чего не хватает.
var connection = new comet.CometD();
var transport = new comet.WebSocketTransport();
connection.registerTransport('websocket', transport);
connection.unregisterTransport('callback-polling');
connection.unregisterTransport('long-polling');
connection.configure({
url: url,
channel: someChannel
}
connection.handshake(handshakeAuthRequest, function (response) {
console.log(response);
});
Обратите внимание, что я также удалил long-polling и протоколы обратного вызова . Вы также можете указать индекс 0 для протокола websocket, если вы хотите, чтобы он был по умолчанию, например:
connection.registerTransport('websocket', transport, 0);