简体   繁体   English

NodeJS WebSocket 向客户端发送消息

[英]NodeJS WebSocket sending message to client

I have two of Nodejs application, one is used as WebSocket server and another one is used as WebSocket Client.我有两个 Nodejs 应用程序,一个用作 WebSocket 服务器,另一个用作 WebSocket 客户端。

server.js服务器.js

const express = require('express');
const WebSocketServer = require('ws');
const wsClient = new WebSocketServer('ws://localhost:1998/');

wsClient.send('Hialo');


const app = express();



const server = app.listen(1989, () => {
    console.log('App is listening on 1989');
});

const wss = new WebSocketServer.Server({ server:server });


wss.on("connection", ws => {
    console.log("There is a new client!");
    ws.on('message', (message) => {
        console.log(`Incident message is ${message}`);
    })
})

client.js客户端.js

const express = require('express');
const WebSocketServer = require('ws');

const app = express();



const server = app.listen(1998, () => {
    console.log('App is listening on 1998');
});

const wss = new WebSocketServer.Server({ server:server });


wss.on("connection", ws => {
    console.log("There is a new client!");
    ws.on('message', (message) => {
        console.log(`Incident message is ${message}`);
    })
})

Problem is: when i try to send message from server to client i am getting this error:问题是:当我尝试从服务器向客户端发送消息时,出现此错误:

Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (C:\Users\Public\Projects\wsGroup\wsServer\node_modules\ws\lib\websocket.js:441:13)
    at Object.<anonymous> (C:\Users\Public\Projects\wsGroup\wsServer\index.js:5:10) 
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)     
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47

What is the best solution???什么是最好的解决方案???

WebSocket Client Server Example WebSocket 客户端服务器示例

// server.js

const WebSocket = require('ws')

const wss = new WebSocket.Server({ port: 8080 })

wss.on('connection', ws => {
  ws.on('message', message => {
    console.log(`Received message => ${message}`)
  })
  ws.send('Hello! Message From Server!!')
})

Client Example客户端示例

// client.js

const WebSocket = require('ws')
const url = 'ws://localhost:8080'
const connection = new WebSocket(url)

connection.onopen = () => {
  connection.send('Message From Client') 
}

connection.onerror = (error) => {
  console.log(`WebSocket error: ${error}`)
}

connection.onmessage = (e) => {
  console.log(e.data)
}

With Express JS server.js使用 Express JS server.js

const express = require('express');
const ws = require('ws');

const app = express();

// Set up a headless websocket server that prints any
// events that come in.
const wsServer = new ws.Server({ noServer: true });
wsServer.on('connection', socket => {
  socket.on('message', message => console.log(message));
});

// `server` is a vanilla Node.js HTTP server, so use
// the same ws upgrade process described here:
// https://www.npmjs.com/package/ws#multiple-servers-sharing-a-single-https-server
const server = app.listen(3000);
server.on('upgrade', (request, socket, head) => {
  wsServer.handleUpgrade(request, socket, head, socket => {
    wsServer.emit('connection', socket, request);
  });
});

client.js客户端.js

const ws = require('ws');

const client = new ws('ws://localhost:3000');

client.on('open', () => {
  // Causes the server to print "Hello"
  client.send('Hello');
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM