【Node.js】WebSocket服务端和客户端数据交换的数据类型问题

一、前言

这是一个使用WebSocket通信时解析数据类型的学习笔记。
在socket通讯是要使用 ArrayBufferString 类型进行发送,想要发送json对象、数组等其他类型的数据就必须转换数据类型,下面我将json对象转换成字符串进行数据交换。

二、环境 Nodejs + ws

安装

npm init
npm i ws

服务端代码

server.js

const WebSocket = require('ws');    //导入websocket模块
const wss = new WebSocket.Server({  //创建一个WebSocket Server的实例
    host: "0.0.0.0",
    port: 9000,
});
//监听app客户端连接事件
wss.on('connection', function connection(ws) {
	//监听消息,接收到消息触发回调函数
	ws.on('message', function incoming(recvAppData) {
		console.log('received: %s', recvAppData);  //打印接收消息
		let data = {Name: "alis"};
		ws.send(data);  //发送消息
	});
});

客户端代码

client.js

const WebSocket = require('ws')
const ws = new WebSocket('ws://localhost:9000') //连接

ws.on('open', () => { //已连接
  ws.send('connected'); // 发送
})
// 接收
ws.on('message', (message) => {
	console.log(message);
})

运行以上代码会报错,是发送数据类型错误。

三、解决方案

只需要将要发送的json对象用 JSON.stringify() 转成字符串就可以了。当然接收数据直接打印出来的是 ArrayBuffer 类型的数据,可以用 JSON.parse() 转换回json对象

了解更多
JSON.stringify()
JSON.parse()

demo

将上面代码进行修改

  • server.js
ws.send(JSON.stringify(data)) //发送数据前先转换
  • client.js
console.log(JSON.parse(message)) //打印数据前先转换

你可能感兴趣的:(Debug,websocket,javascript,网络协议)