Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复'';无法将文本帧解码为UTF-8。”;将RabbitMQ缓冲区发送到Websocket时?_Javascript_Websocket_Rabbitmq - Fatal编程技术网

Javascript 如何修复'';无法将文本帧解码为UTF-8。”;将RabbitMQ缓冲区发送到Websocket时?

Javascript 如何修复'';无法将文本帧解码为UTF-8。”;将RabbitMQ缓冲区发送到Websocket时?,javascript,websocket,rabbitmq,Javascript,Websocket,Rabbitmq,从RabbitMQ队列到websocket的所有通信都失败,错误为“websocket连接到”wss://my cloudamqp实例/ws/“失败:无法将文本帧解码为UTF-8” 我有一个前端,它使用STOMP和WebSocket以及RabbitMQ向微服务发送请求。这部分通信正在工作,但MS无法将响应发送回前端。所有尝试都会导致上述错误消息。如果我跳过websocket并直接从队列中读取,前端可以得到响应,但是我必须使用STOMP/websocket来实现这一点 前端websocket声明:

从RabbitMQ队列到websocket的所有通信都失败,错误为“websocket连接到”wss://my cloudamqp实例/ws/“失败:无法将文本帧解码为UTF-8”

我有一个前端,它使用STOMP和WebSocket以及RabbitMQ向微服务发送请求。这部分通信正在工作,但MS无法将响应发送回前端。所有尝试都会导致上述错误消息。如果我跳过websocket并直接从队列中读取,前端可以得到响应,但是我必须使用STOMP/websocket来实现这一点

前端websocket声明:

var wss = new WebSocket("wss://*our cloud amqp instance*/ws/");
var client = Stomp.over(wss);
再往下看:

client.subscribe('/queue/frontendResponse', onMessage);
后端将响应放入前端响应队列,如下所示:

channel.sendToQueue(queue, msgpack.encode(data), options);
上面示例中的“数据”是一个字符串化的JSON对象


我认为问题不在于STOMP,因为浏览器在错误消息中逐行调用“var wss=new WebSocket…”(例如,“Connection.js:14”)。我尝试过对数据对象和由msgpack.encode()调用创建的缓冲区对象的各个部分进行显式UTF-8编码,但仍然得到相同的错误消息。amqplib函数sendToQueue()只接受缓冲区作为第二个参数,因此尝试显式发送UTF-8编码的字符串也不起作用。我还尝试了StackOverflow和其他站点的一些想法,比如转义控制字符或使用“encodeURIComponent()”。我无法摆脱此错误消息,无法尝试。非常感谢任何帮助;谢谢

好吧,我回答了我自己的问题。我读了一篇回复,其中建议JSON.stringify足以创建Websocket协议可接受的对象。然后我用它创建了一个缓冲区。因此,后端代码更改为:

channel.sendToQueue(queue, Buffer.from(JSON.stringify(msgpack.encode(data))), options);

前端有一个可以使用的对象。

好吧,我回答了我自己的问题。我读了一篇回复,其中建议JSON.stringify足以创建Websocket协议可接受的对象。然后我用它创建了一个缓冲区。因此,后端代码更改为:

channel.sendToQueue(queue, Buffer.from(JSON.stringify(msgpack.encode(data))), options);

前端得到一个可以使用的对象。

如何在客户端上解码
msgpack
?JSON.parse消息体,然后解码
msgpack.decode
数据字段:var obj=JSON.parse(message.body);日志(msgpack.decode(obj.data));抱歉,我一直在尝试设置格式。但是我想你明白了。你如何在客户端上解码
msgpack
?JSON.parse消息体,然后解码
msgpack.decode
data字段:var obj=JSON.parse(message.body);日志(msgpack.decode(obj.data));抱歉,我一直在尝试设置格式。但我想你明白了。