Meteorjs 相当于 ws.send

问题描述 投票:0回答:1

我试图发送一条简单的消息,表明后端发生了事件,特别是我有一个可观察的对象,它监听 mongodb 中是否有任何更改/更新,然后更新 Elasticsearch 中的相关记录。

是否有 Meteor 相当于后端的 ws.send() 并在前端使用 ws.on() ?

如何使用 Meteor 做到这一点?

我知道 Meteor.publish/subscribe 但它不太一样,而且不符合我的需要

javascript meteor
1个回答
0
投票

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 以在没有集合的情况下运行。

© www.soinside.com 2019 - 2024. All rights reserved.