Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 如何使用'ws'库将此请求发送到WebSocket_Javascript_Node.js_Ws - Fatal编程技术网

Javascript 如何使用'ws'库将此请求发送到WebSocket

Javascript 如何使用'ws'库将此请求发送到WebSocket,javascript,node.js,ws,Javascript,Node.js,Ws,我正在使用一个私有API,试图使用ws库通过WebSocket发送以下请求。我可以使用Google Chrome中的来实现这个请求,但是我用ws尝试的一切都不起作用。已建立WebSocket连接。我之所以知道这一点,是因为我得到了一个通用的心跳消息,并且我能够获取用于其他目的的事件。但这篇简单的文章让我感到困惑,主要是因为私有API关于WebSocket使用的文档很少,至少可以说,如果不是完全不存在的话 请求:{“消息”:“ping”} 我的代码: const ws =

我正在使用一个私有API,试图使用
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);