我试图发送一条简单的消息,表明后端发生了事件,特别是我有一个可观察的对象,它监听 mongodb 中是否有任何更改/更新,然后更新 Elasticsearch 中的相关记录。
是否有 Meteor 相当于后端的 ws.send() 并在前端使用 ws.on() ?
如何使用 Meteor 做到这一点?
我知道 Meteor.publish/subscribe 但它不太一样,而且不符合我的需要
Meteor 只是为你抽象了 Websocket,但它仍然存在。然而,这样做也会迫使你遵循某种模式。
首先,您需要使用
Meteor.onConnection
来跟踪 Meteor 级别的连接。
然后您需要获取您想要将消息发送到的连接的正确套接字实例:
服务器
import { Meteor } from 'meteor/meteor';
Meteor.startup(() => {
Meteor.onConnection(connection => {
const socket = Meteor.server.stream_server.open_sockets.find(s => s._meteorSession.id === connection.id)
socket.send(JSON.stringify({
msg: 'foo',
custom: 'data'
}))
})
});
当然,您始终可以使用
Meteor.server.stream_server.open_sockets
(实例引用数组)将消息发送到所有连接的客户端。
客户
Meteor.startup(() => {
Meteor.connection._stream.on('message', (dataStr) => {
const data = JSON.parse(dataStr)
// this is your custom message
if (data.msg === 'foo') {
console.debug(data)
}
})
})
剩下的就是通过请求此消息的连接找到正确的客户端,此时您可能会返回 pub/sub 或自定义 pub/sub 以在没有集合的情况下运行。