Groovy Magの雰囲気の例(https://github.com/rbramley/GroovyMagJMS)を拡張して、さまざまなクライアントにブロードキャストしようとしています。 (Broadcasting to a subset of subscribers in Atmosphereのように)Grails Atmosphereプラグインが異なるクライアントにブロードキャストされる
クライアントはURL http://localhost:8080/GrailsTest/atmosphere/messages/?id=1に接続します。 IDがサーバーに渡されます。新たに追加されたlookupBroadcasterメソッドは、idを持つ新しいBroadcasterオブジェクトを作成します。メッセージをブロードキャストしたいとき、クライアントは結果を受け取らない。
誰かが私を助け、それを試してみることはできますか?
'/ atmosphere/messages/*'のようなマッピングを使用するために、0.8.2ライブラリをBuildConfig.groovyに追加しました。
dependencies {
runtime 'org.atmosphere:atmosphere-runtime:0.8.2'
}
class AtmosphereService {
static transactional = false
static atmosphere = [mapping: '/atmosphere/messages/*']
static exposes = ['jms']
@Subscriber(topic='msgevent')
def onEvent(msg) {
println 'onevent'
def payload = msg
if(msg instanceof Map) {
// convert map messages to JSON
payload = msg.encodeAsJSON()
}
Broadcaster b = lookupBroadcaster(msg["id"], false);
b.broadcast(payload)
return null
}
Broadcaster lookupBroadcaster(String id, Boolean createBroadcast) {
return BroadcasterFactory.getDefault().lookup(id, createBroadcast)
}
def onRequest = { event ->
def req = event.request
def id = req.getParameter("id")
Broadcaster b = lookupBroadcaster(id, true);
event.setBroadcaster(b);
b.addAtmosphereResource(event)
event.suspend()
}
def onStateChange = { event ->
if (event.message) {
log.info "onStateChange, message: ${event.message}"
if (event.isSuspended()) {
event.resource.response.writer.with {
write "<script>parent.callback('${event.message}');</script>"
flush()
}
event.resume()
}
}
}
}