【问题标题】:WebSocket.send is not a functionWebSocket.send 不是函数
【发布时间】:2022-01-19 18:15:54
【问题描述】:

我正在尝试为 Minecraft 设置一个 websocket 服务器。

代码:

const WebSocket = require('ws')
const uuid = require('uuid')        // For later use

console.log('Worldedit Ready. On Minecraft chat, type /connect localhost:1010')
const wss = new WebSocket.Server({ port: 1010 })


wss.send(JSON.stringify({
    "header": {
      "version": 1,                     // We're using the version 1 message protocol
      "requestId": uuid.v4(),           // A unique ID for the request
      "messageType": "commandRequest",  // This is a request ...
      "messagePurpose": "subscribe"     // ... to subscribe to ...
    },
    "body": {
      "eventName": "PlayerMessage"      // ... all player messages.
    },
  }))
// On Minecraft, when you type "/connect localhost:3000" it creates a connection
wss.on('connection', socket => {
  console.log('Connected')
})
wss.on('message', packet => {
    const msg = JSON.parse(packet)
    console.log(msg)
  })

错误:

TypeError: wss.send is not a function
    at Object.<anonymous> (C:\Users\jerem\Documents\world edit\main.js:8:5)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47

我正在关注的教程使用ws.send。为什么这会返回错误?我以为send 是一个函数。

【问题讨论】:

  • 你不使用你的服务器对象发送?您发送到socket 到达connection 事件。因此,wss.send() 不是您可以在代码中执行的操作。相反,进入connection 事件处理程序并执行socket.send()

标签: node.js websocket


【解决方案1】:

已经有一段时间了,但这里有一个工作版本:

const WebSocket = require('ws')
const uuid = require('uuid')        // For later use

console.log('Worldedit Ready. On Minecraft chat, type /connect localhost:1010')
const wss = new WebSocket.Server({ port: 1010 })

// On Minecraft, when you type "/connect localhost:3000" it creates a connection
wss.on('connection', socket => {
    console.log('Connected')

    //send this to every new ws connection
    socket.send(JSON.stringify({
        "header": {
          "version": 1,                     // We're using the version 1 message protocol
          "requestId": uuid.v4(),           // A unique ID for the request
          "messageType": "commandRequest",  // This is a request ...
          "messagePurpose": "subscribe"     // ... to subscribe to ...
        },
        "body": {
          "eventName": "PlayerMessage"      // ... all player messages.
        },
    }))


    socket.on('message', packet => {
        const msg = JSON.parse(packet)
        console.log(msg)
    })
})

【讨论】:

    【解决方案2】:
    const WebSocket = require('ws')
    const uuid = require('uuid')        // For later use
    
    console.log('Worldedit Ready. On Minecraft chat, type /connect localhost:1010')
    const wss = new WebSocket.Server({ port: 1010 })
    
    // On Minecraft, when you type "/connect localhost:3000" it creates a connection
    wss.on('connection', function connection(ws) {
        console.log('Connected')
        ws.send(JSON.stringify({
            "header": {
                "version": 1,                     // We're using the version 1 message protocol
                "requestId": uuid.v4(),           // A unique ID for the request
                "messageType": "commandRequest",  // This is a request ...
                "messagePurpose": "subscribe"     // ... to subscribe to ...
            },
            "body": {
                "eventName": "PlayerMessage"      // ... all player messages.
            },
        }))
    })
    wss.on('message', packet => {
        const msg = JSON.parse(packet)
        console.log(msg)
    });
    

    请试试这个。

    【讨论】:

    • 返回类似的错误(发送不是函数)
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2013-08-17
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2019-12-20
    相关资源
    最近更新 更多