如何从 nodejs 服务器订阅 ws websocket 到另一台服务器?

Posted

技术标签:

【中文标题】如何从 nodejs 服务器订阅 ws websocket 到另一台服务器?【英文标题】:How can subscribe to ws websocket from a nodejs server to another server? 【发布时间】:2020-09-26 13:06:37 【问题描述】:

我在nodejs 中有microservice 必须订阅ws(不是socket.io)websocket 写在c#(你可以在这里考虑任何语言),请提供sn-p 或文档以供阅读或任何其他显示如何做到这一点的东西(不是功能性的,使用 oop 类样式)。

类中哪里必须订阅消息,语法是什么样的?

【问题讨论】:

查看任何 nodejs ws 库的文档,您将看到如何将其用作客户端以连接到某些外部 ws 服务器的示例。这里的工作方式是你自己做研究,你尝试一些代码,当你遇到困难时,你在这里发布一个特定的编码问题。您不会在此处发帖要求我们为您进行研究,并且您不应该发布可以在任何 nodejs ws 库的文档中找到的内容。 另外,我希望你意识到你想连接的目标ws服务器是用什么语言编写的无关紧要。你会说相同的ws协议来连接它,无论目标服务器是不是写的在 C#、Java、javascript、Python 或其他语言中。 首先我写道,如果你知道文件给我,因为我没有找到,它们都在 express env 、functional 、server for application 和 provider server 中,你没有甚至阅读问题。它不是 express ,它是 oop ,它是微服务,它是客户端而不是服务器。 另外这里是提问的地方,我的ide告诉我错字,每个问题都不是关于脚本的。抱歉,如果您没有回答。 我不知道你在问什么,除了已经记录在两个更流行的 nodejs websocket 库中的 here 和 here 之外。如果您正在寻找其他一些编程风格,那么请在您的问题中非常具体地使用代码示例来说明您正在寻找什么类型的风格。如果我理解这个问题,我很乐意提供帮助。是的,我已经多次阅读这个问题。当您侮辱试图帮助的人时,通常不会帮助您更快地获得答案。 【参考方案1】:

我尝试了数百万种方法,但在 Nestjs 中侦听其他服务器时,您必须使用原始“ws”来实现它。

// -------------------- Packages ------------------

import  InjectQueue  from '@nestjs/bull';
import  Inject, Injectable, Logger  from '@nestjs/common';
import * as WebSocket from 'ws';

// ------------------------------------------------

@Injectable()
export class SocketService 
  // -------------------- LGGER --------------------------

  private logger = new Logger(SocketService.name);

  // ------------------- Filelds and Props ---------------

  private readonly routeForSocket = 'wss://yourSenderAddressMaybeIsC#orJAVA';
  private socketRLC: WebSocket;

  // ------------------- Ctor ---------------

  constructor() 
    this.onRLCSocketClose = this.onRLCSocketClose.bind(this);
    this.onRLCSocketError = this.onRLCSocketError.bind(this);
    this.onRLCSocketOpen = this.onRLCSocketOpen.bind(this);
    this.onRLCSocketMessage = this.onRLCSocketMessage.bind(this);
  

  // =================== INIT SOCKET  ========================

  public initSocketRLC(rlcToken: string) 
    this.socketRLC = new WebSocket(this.routeForSocket,'token-if-need');
    this.socketRLC.onopen = this.onRLCSocketOpen;
    this.socketRLC.onerror = this.onRLCSocketError;
    this.socketRLC.onmessage = this.onRLCSocketMessage;
    this.socketRLC.onclose = this.onRLCSocketClose;
  

  // SOCKET Listen On Open --------------------------------------------

  public async onRLCSocketOpen(msg) 
    console.log(msg);
    if (msg.type === 'open') 
      console.log('hellow');
    
  

  // SOCKET Listen MESSAGE HANDLER ------------------------------------------

  public async onRLCSocketMessage(msg: any) 
    const msgArr = msg.data.split(',');
    // console.log(msgArr, 'i am messagesssssssssssssssssssssss');
   
  

  // SOCKET Listen ERROR HANDLER --------------------------------------------

  public onRLCSocketError(error: any)
    console.log(error, 'i am error');
  

  // SOCKET Listen CLOSE HANDLER --------------------------------------------

  public async onRLCSocketClose(cmp: any) 
    console.log(cmp);
  

  // SOCKET CLOSE BY FORCE --------------------------------------------------

  public async closeRLC(): Promise<any> 
    this.socketRLC.close();
  

【讨论】:

以上是关于如何从 nodejs 服务器订阅 ws websocket 到另一台服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nginx nodejs 服务器上配置“ws”websocket?

如何在 NodeJS 包中构造 XMPP 的订阅消息?

Websockets(ws) , NodeJs 集群,

如何在生产中使用 apollo 订阅

如何使用 nodejs 在服务总线主题中创建新订阅?

NodeJS中的Websockets。从服务器端WebSocket客户端调用WebSocketServer