簡體   English   中英

在樹莓派中向 RabbitMq 的網頁之間發送消息

[英]send a message between a webpage to RabbitMq in raspberry pi

我正在嘗試在網頁之間向樹莓派中的 RabbitMq 發送消息。 RabbitMq 教程中的 send.js 和 receive.js 工作正常。 但是,當在 HTML 中添加指向 javascript 文件的鏈接時不起作用

<HTML>  
<head>  
<script type = "text/javascript" src="send.js"></script>  
</head>  
<body>  
<p>Click the following button to see the function in action</p>  
<input type = "button" onclick = "myfunction()" value = "Display">  
</body>  
</html>  

send.js是網站教程中的一個。 我所做的唯一更改是添加 function 標題

function myfunction () {


  var amqp = require('amqplib/callback_api');

  amqp.connect('amqp://localhost', function(error0, connection) {
    if (error0) {
       throw error0; 
         ....
            .....
              ....

有什么我想念的嗎?

require是 CommonJS 模塊的一個特性。 這是 Node.js 使用的默認模塊系統,web 瀏覽器不支持。

雖然可以使用捆綁器(例如 Webpack 或 Parcel)將某些模塊轉換為在瀏覽器中使用,但您正在使用的模塊明確標記為用於 Node.js 並且幾乎可以肯定依賴於 Z3B2819DD2C24EDA251FAF25 中可用但瀏覽器中不可用的 API。

您的代碼不會在瀏覽器中運行。

您可以使用使用 amqplib 的 Node.js(例如使用 Express.js 模塊)編寫 web 服務,然后使用瀏覽器原生支持的獲取 API訪問它。 或者,如果您需要服務器能夠發起消息,請使用Websockets

通過網站與 RabbitMQ 服務建立實時連接的想法圍繞着 WebSockets。 對於這種方法,我們需要在 RabbitMQ 服務上安裝一個插件,然后在客戶端,打開一個 WebSocket 來連接插件。 該插件是 WS 和代理之間的一種橋梁。

根據我的經驗,Paho.js 和 STOMP 是兩個現有的解決方案。 Paho.js 僅限於連接到主題,而 STOMP 是一個完整的實用工具。

要在 RabbitMQ 服務器上啟用 STOMP 插件:

rabbitmq-plugins enable rabbitmq_stomp

然后也安裝網橋:

rabbitmq-plugins enable rabbitmq_web_stomp

現在您的服務器已經可以使用了。 讓我們進入客戶端。 下載此文件並將其放在項目中的某個位置。 現在是socket連接部分:

import { Stomp } from './stomp';

var ws = new WebSocket('ws://yourServerAddress:15674/ws');
var client = Stomp.over(ws);

var on_receive =  function(data) {
    console.log('received:', data.body);
};
var on_connect = function() {
    console.log('connected');
    client.subscribe('/amq/queue/your-queue', on_receive)
};
var on_error =  function() {
    console.log('error');
};

client.onreceive = on_receive;
client.connect('yourUsename', 'thePasswd', on_connect, on_error, '/');

function send(payload, headers={}){
  client.send('/amq/queue/your-queue', headers, JSON.stringify(payload));
}
  • 請記住,我編寫此代碼是為了直接連接到隊列。 對於主題,只需將訂閱端點更改為/amq/topic/your-topic

您可以在此處查看完整的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM