当前位置: 首页 > 面试题库 >

通过faye通过websocket发送javascript对象

杨慎之
2023-03-14
问题内容

大家好,我正尝试通过websockets发送javascript对象:

faye-websockets文档说:

send(message) 接受字符串或缓冲区,并通过连接向另一对等方发送文本或二进制消息。

服务器端我正在使用node和faye。

var WebSocket = require('faye-websocket');
var http = require('http');

var server = http.createServer();
server.addListener('upgrade', function(request, socket, head) {
    var ws = new WebSocket(request, socket, head);
    ws.send({topic:'handshake', data:'sdf487rgiuh7'});
});
server.listen(8000);

客户端:

<script>
    var ws = new WebSocket('ws://localhost:8000');
    ws.onmessage = function(e) {
        console.log(e.data); //prints [Object object] string and not the object
    };
</script>

我的错误是什么?谢谢


问题答案:

WebSockets支持发送和接收:字符串,类型数组(ArrayBuffer)和Blob。发送之前,必须将Javascript对象序列化为上述类型之一。

要将对象作为字符串发送,可以使用内置的JSON支持:

ws.send(JSON.stringify(object));

要发送一个对象作为一个类型数组,你可以使用JavaScript库BSON比如这一个:

ws.send(BSON.serialize(object));

当您收到WebSocket消息时,需要对其进行反序列化。

要从WebSocket消息反序列化JSON字符串,请执行以下操作:

ws.onmessage = function (e) {
    var object = JSON.parse(e.data);
    ...
};

如果通过WebSocket使用二进制消息,则首先应设置binaryType属性,以便将所有二进制消息作为类型化数组接收:

ws.binaryType = "arraybuffer";

然后反序列化将如下所示:

ws.onmessage = function (e) {
    var object = BSON.deserialize(e.data);
    ...
};

这是有关在Javascript中使用BSON的博客文章;



 类似资料:
  • 问题内容: 我定义一个类,然后设置该类类型的对象。我想将此对象透明地发送到在另一台计算机上运行的另一个Java应用程序。什么是实现这一目标的最佳技术? 问题答案: 您可以使用Java API创建对象流并发送任何可序列化的对象。但您必须注意,这些内容不会通过网络进行加密: 在发送方方面: 在接收端:

  • 问题内容: 我正在通过失败学习Ajax并碰壁: 我有一个用Javascript编写的数组(如果有关系,该数组将根据用户选中的复选框存储数字ID)。 我有一个函数,当用户单击“保存”按钮时被调用。功能如下: 我的问题是: 我可以在此函数中添加什么以将数组拉入要调用的php脚本(“ create_amenities.php”)? 此外,我应该尝试使用JSON吗?如果是这样,我如何通过ajax发送JSO

  • ap.sendSocketMessage(OPTION, CALLBACK) 通过 WebSocket 连接发送数据,需要先 ap.connectSocket,并在 ap.onSocketOpen 回调之后才能发送。 OPTION 参数说明 名称 类型 必选 描述 data String/ArrayBuffer 否 请求的参数 代码示例 <script src="https://gw.alipay

  • 我想通过javascript代码发送gcm消息。为此,我们需要发布一个json对象。 gcm文档:http://developer.android.com/google/gcm/adv.html.中给出了url和json对象格式 出于测试目的,我编写了一个完美运行的Java代码。但是爪哇脚本代码不起作用。如果有人有一些示例工作代码(gcm的爪哇脚本),请发布。 脚本代码 :

  • 我想在登录时向特定用户发送通知,我使用Firebase消息,我可以通过控制台发送通知,但我想使用发送到主题和request以Swift代码发送此通知。当我在postman中运行代码时,我无法实现http请求以发送通知。我有以下错误: 请求缺少身份验证密钥(FCM令牌)。请参阅FCM文档的“认证”部分,网址为https://firebase.google.com/docs/cloud-messagi

  • 我有一个Spring启动应用程序运行在heroku。我使用webSocket为特定用户向客户端和服务器发送消息。我使用Spring引导的SimpMessagingTemplate.convertAndSendToUser来发送和接收消息,当用户需要从服务器获取消息时,这种方法效果很好。我使用Heroku会话亲和力,这意味着即使我扩大了会话的数量,用户和webSocket仍然共享同一个会话。 当我需