PhantomJS 如何通过 RabbitMQ 进行通信?

How can PhantomJS communicate through RabbitMQ?

我是 RabbitMQ 的新手。我使用 PhantomJS 并使用 JavaScript 来做事。现在,我需要将一些结果发送到 RabbitMQ,以便使用另一个脚本读取它们。我的意思是,我希望 PhantomJS 与 RabbitMQ 通信。发送一些消息并从队列中读取一些消息。那可能吗? PhantomJS 是否可以通过它与 RabbitMQ 通信?

PhantomJS 只是另一个浏览器。这正是 RabbitMQ Web-Stomp Plugin 的用途。它基于 SockJS,它在浏览器和服务器之间提供 Web 套接字连接。如果网络套接字不可用,则存在跨浏览器回退。 PhantomJS 从版本 2 开始支持网络套接字。

如果您没有 open PhantomJS 中的页面,那么您需要 运行 使用 --local-to-remote-url-access=true 选项。我假设 sockjs-0.3.js 和 stomp.js 在脚本目录中。

page.injectJs('sockjs-0.3.js');
page.injectJs('stomp.js');
page.evaluate(function(){
    var ws = new SockJS('http://127.0.0.1:15674/stomp');
    window.client = Stomp.over(ws);
    ...
});

这必须在页面上下文中 运行(在 page.evaluate() 内)。所以这就是为什么 client 是全局 window 属性 的原因,这样您就可以在随后的 page.evaluate() 调用中获得对客户端的引用。您可以使用 window.callPhantom()page.onCallback 事件处理程序触发从页面上下文到外部的调用。