があるとイベントの基本的な配列は、他のフレームワークに類似していなければならないが、この例では、Grailsの3.3です。
最初にサブスクライブし、接続を閉じるためのエンドポイントを設定します。
def index() {
// handler for GET /api/subscribe
rx.stream { Observer observer ->
// This is the Grails event bus. background tasks,
// services and other controllers can post these
// events, CLIENT_HANGUP, SEND_MSG, which are
// just string constants.
eventBus.subscribe(CLIENT_HANGUP) {String msg ->
// Code to handle when the grails event bus
// posts CLIENT_HANGUP
// Do any side effects here, like update your counter
// Close the SSE connection
observer.onCompleted()
return
}
eventBus.subscribe(SEND_MSG) {String msg ->
// Send a Server Sent Event
observer.onNext(rx.respond(msg))
}
}
}
def disconnecting()
{
// handler for GET /api/disconnect
// Post the CLIENT_HANGUP event to the Grails event bus
notify(CLIENT_HANGUP, 'disconnect')
}
は今、クライアントに、あなたはあなたのユースケースは、それを必要とするたびにGET /api/disconnect
に配置する必要があります。誰かがあなたのページから移動したときに気付きたいと思えば、window.onbeforeunload
に関数を登録することができます。この例では、Vue.js
とAxios
を使用しています。サーブレットの場合
window.onbeforeunload = function (e) {
e.preventDefault()
Vue.$http({
method: 'get',
url: 'http://localhost:8080/api/disconnect'
})
.then((response) => { console.log(response) })
.catch(({error}) => { console.log(error) })
}
は、Grailsのようにスタック、私はブラウザが去って行ったときに私が行うには、私自身のないハウスキーピングがなかった場合でも、これを行うために必要なことがわかりました。それがなければ、ページリロードはバックエンドでIOExceptionを引き起こしていました。
なぜ興味があるのですか? – baynezy
私は、ユーザーが購読するたびにインクリメントするカウンタを持っており、購読を停止するたびに減少したいと考えています...それはすべてです –