Javascript 如何使用'ws'库将此请求发送到WebSocket
我正在使用一个私有API,试图使用Javascript 如何使用'ws'库将此请求发送到WebSocket,javascript,node.js,ws,Javascript,Node.js,Ws,我正在使用一个私有API,试图使用ws库通过WebSocket发送以下请求。我可以使用Google Chrome中的来实现这个请求,但是我用ws尝试的一切都不起作用。已建立WebSocket连接。我之所以知道这一点,是因为我得到了一个通用的心跳消息,并且我能够获取用于其他目的的事件。但这篇简单的文章让我感到困惑,主要是因为私有API关于WebSocket使用的文档很少,至少可以说,如果不是完全不存在的话 请求:{“消息”:“ping”} 我的代码: const ws =
ws
库通过WebSocket发送以下请求。我可以使用Google Chrome中的来实现这个请求,但是我用ws
尝试的一切都不起作用。已建立WebSocket连接。我之所以知道这一点,是因为我得到了一个通用的心跳消息,并且我能够获取用于其他目的的事件。但这篇简单的文章让我感到困惑,主要是因为私有API关于WebSocket使用的文档很少,至少可以说,如果不是完全不存在的话
请求:{“消息”:“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'
}
节点:缓冲区:323
抛出新错误\u无效\u参数\u类型(
^
TypeError[ERR_INVALID_ARG_TYPE]:第一个参数的类型必须为string或Buffer、ArrayBuffer、Array或类似数组的对象的实例。收到了Object的实例
在新节点错误(节点:内部/错误:329:5)
at Function.from(节点:缓冲区:323:9)
在toBuffer(/Users/user/Documents/GitHub/lib/node_modules/ws/lib/buffer util.js:97:18)
在Sender.send(/Users/user/Documents/GitHub/lib/node_modules/ws/lib/Sender.js:261:17)
在WebSocket.send(/Users/user/Documents/GitHub/lib/node_modules/ws/lib/WebSocket.js:361:18)
在WebSocket.ws.onopen(/Users/user/Documents/GitHub/lib/server.js:55:20)
在WebSocket.onOpen(/Users/user/Documents/GitHub/lib/node_modules/ws/lib/event target.js:144:16)
在WebSocket.emit(节点:事件:378:20)
在WebSocket.setSocket(/Users/user/Documents/GitHub/lib/node_modules/ws/lib/WebSocket.js:177:10)
在ClientRequest上。(/Users/user/Documents/GitHub/lib/node_modules/ws/lib/websocket.js:671:15){
代码:“错误\无效\参数\类型”
}
这个
ws.send(“message”,“ping”)
没有任何作用。您只能使用WebSocket.prototype.send
发送JSON.parse
+JSON.stringify
快速弥合结构化数据之间的差距(对象,数组,等等)和字符串
尝试:
接收端将获得一个字符串
,而不是对象
——为了重新创建结构化数据,您可以执行以下操作:
let structuredData = JSON.parse(stringReceivedFromWebSocket);
你是否考虑过使用<代码>发送<代码>,就像在任何普通的WebSu套上一样?<代码> WS<代码>是符合规格的,客户端的行为就像普通浏览器WebSu套一样。是的,但是我得到了一个错误。我把它添加到了我的问题中……也许你应该读一个最小的工作WebSoCK例子,看看PS:错误消息甚至陈述得非常明确。我知道。websockets是如何工作的。我尝试过的任何方法都无法解决这个问题,这就是为什么我要问这个问题,因为很明显我遗漏了一些东西。谢谢-感谢您的确认和良好的回答。
let structuredData = JSON.parse(stringReceivedFromWebSocket);