如何使用 `ws` 库将此请求发送到 websockets
How to send this request to websockets using the `ws` library
我正在使用私有 API,尝试使用 ws
库通过 websockets 发送以下请求。我可以使用 Google Chrome 中的 Simple WebSocket Client extension 使此请求正常工作,但我使用 ws
尝试的所有操作均无效。 websockets 连接已建立。我知道这一点是因为我收到了一条通用心跳消息,并且我能够为其他目的获取事件。但是这篇简单的文章让我感到难过,主要是因为私有 API 的 websockets 使用文档很少,至少可以说,如果不是完全不存在的话。
要求:{"message":"ping"}
我的代码:
const ws = new WebSocket(channelData.connectUri)
ws.onerror = error => {
console.log('Connection Error', error)
}
ws.onopen = () => {
console.log("Connected")
ws.emit("message", {"message":"ping"}) // this sends me my own message
// it should send me this:
// {"topicName": "channel.metadata", "eventBody": {"message": "pong"}}
// ws.emit("message", "ping") // attempted this also, without success
}
ws.on("message", msg => console.log(msg))
我曾尝试使用 ws.send({"message":"ping"})
,但出现此错误:
node:buffer:323
throw new ERR_INVALID_ARG_TYPE(
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object
at new NodeError (node:internal/errors:329:5)
at Function.from (node:buffer:323:9)
at toBuffer (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/buffer-util.js:97:18)
at Sender.send (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/sender.js:261:17)
at WebSocket.send (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:361:18)
at WebSocket.ws.onopen (/Users/user/Documents/GitHub/lib/server.js:55:20)
at WebSocket.onOpen (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/event-target.js:144:16)
at WebSocket.emit (node:events:378:20)
at WebSocket.setSocket (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:177:10)
at ClientRequest.<anonymous> (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:671:15) {
code: 'ERR_INVALID_ARG_TYPE'
}
这个ws.send("message", "ping")
什么都不做。
您只能使用 WebSocket.prototype.send
发送 String
或 Buffer
数据。幸运的是,JSON.parse
+ JSON.stringify
快速弥合了结构化数据(Object
、Array
等)和 String
.
之间的差距
尝试:
ws.send(JSON.stringify({"message":"ping"}));
接收端将得到 String
,而不是 Object
- 为了重新创建结构化数据,您可以执行:
let structuredData = JSON.parse(stringReceivedFromWebSocket);
我正在使用私有 API,尝试使用 ws
库通过 websockets 发送以下请求。我可以使用 Google Chrome 中的 Simple WebSocket Client extension 使此请求正常工作,但我使用 ws
尝试的所有操作均无效。 websockets 连接已建立。我知道这一点是因为我收到了一条通用心跳消息,并且我能够为其他目的获取事件。但是这篇简单的文章让我感到难过,主要是因为私有 API 的 websockets 使用文档很少,至少可以说,如果不是完全不存在的话。
要求:{"message":"ping"}
我的代码:
const ws = new WebSocket(channelData.connectUri)
ws.onerror = error => {
console.log('Connection Error', error)
}
ws.onopen = () => {
console.log("Connected")
ws.emit("message", {"message":"ping"}) // this sends me my own message
// it should send me this:
// {"topicName": "channel.metadata", "eventBody": {"message": "pong"}}
// ws.emit("message", "ping") // attempted this also, without success
}
ws.on("message", msg => console.log(msg))
我曾尝试使用 ws.send({"message":"ping"})
,但出现此错误:
node:buffer:323
throw new ERR_INVALID_ARG_TYPE(
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object
at new NodeError (node:internal/errors:329:5)
at Function.from (node:buffer:323:9)
at toBuffer (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/buffer-util.js:97:18)
at Sender.send (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/sender.js:261:17)
at WebSocket.send (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:361:18)
at WebSocket.ws.onopen (/Users/user/Documents/GitHub/lib/server.js:55:20)
at WebSocket.onOpen (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/event-target.js:144:16)
at WebSocket.emit (node:events:378:20)
at WebSocket.setSocket (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:177:10)
at ClientRequest.<anonymous> (/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:671:15) {
code: 'ERR_INVALID_ARG_TYPE'
}
这个ws.send("message", "ping")
什么都不做。
您只能使用 WebSocket.prototype.send
发送 String
或 Buffer
数据。幸运的是,JSON.parse
+ JSON.stringify
快速弥合了结构化数据(Object
、Array
等)和 String
.
尝试:
ws.send(JSON.stringify({"message":"ping"}));
接收端将得到 String
,而不是 Object
- 为了重新创建结构化数据,您可以执行:
let structuredData = JSON.parse(stringReceivedFromWebSocket);