【问题标题】:How to use Node.js "Net" class (or other TCP back-end) in an Angular application如何在 Angular 应用程序中使用 Node.js“Net”类(或其他 TCP 后端)
【发布时间】:2017-10-24 17:32:38
【问题描述】:

我是 Node.js 和 Angular 的新手,我将用我的问题来证明这一点。

在我使用的 Angular 教程中,我看到了使用 Angular“服务”实现的“后端”部分,通过例如创建。 “ng c s myservice”,其中 myservice 成为添加到应用程序提供程序列表中的可注入项。我见过的大多数示例要么使用本地测试数据存根实现此服务,要么通过对 Mongo 数据库之类的 http 请求实现此服务。

但是,我的 (Angular) 应用程序需要连接到后端的 TCP 服务器。不能使用 http 协议。

我尝试的第一件事是socket.io-client,只是发现它只是http。然后我尝试了 node.js 的 Net 类,就像这样(在给定端口上侦听一个简单的 TCP 服务):

import { Injectable } from '@angular/core';

@Injectable()
export class RemoteService {
  net = require('net');
  client;
  serverStatus: string = 'Unknown';
  PORT: number = 51101;
  IP = '127.0.0.1';

  constructor() { 
    console.log('Initializing remote client. Calling ' + this.IP + ':' + this.PORT + ' ...');

    this.client = this.net.createConnection({ port: this.PORT }, { host : this.IP }, () => {
      console.log('Connected to server!!!');
    });
  }
}

...但这会导致浏览器控制台出现此错误:

ERROR TypeError: this.net.createConnection is not a function

当我研究该特定错误时,常见的解释(简短版本)是“您无法通过浏览器执行此操作”。 (一个例子here。)

我知道为什么不能从“浏览器”执行 TCP 或 UDP 或类似操作。我没有得到的是我的后端部分如何被称为“浏览器”。任何人都可以为我澄清这一点吗? (我是否误解了 Angular 的能力?)

是否可以在 Angular 服务中使用 Node.js's Net class,如果可以,如何使用?

【问题讨论】:

  • Nodejs 在后端(服务器)运行,Angular 在前端运行。你可能应该使用 Angular 的 HttpClient:angular.io/guide/http
  • 您的 Angular 应用没有“后端”。一切都在浏览器中运行。您的应用程序可能会“连接”到后端,但这将是在服务器上运行的不同应用程序。也许这已经发生了,但是您没有在问题中解释后端运行的是什么以及如何连接到它。
  • 所以你有一个使用节点本机网络模块的 TCP 服务器。你说你不能使用http协议?所有 Websocket 交互都需要 http 握手。从 Socket.io 切换到 net 模块并不能解决您的问题,这是完全相同的事情。您能否详细说明一下您的后端情况?
  • @ChristianBenseler:你的回答总结了:我想做的事是做不到的。我对 Angular 所说的“后端”的含义有一个基本的误解(这是它说“前端的 HTTP 请求”的方式)。我必须创建与 HTTP 服务器通信所需的 (C++) 服务(痛苦,但可行),并在我的 Angular 应用程序中使用 HttpClient。
  • 我还需要弄清楚(C++)HTTP 服务器如何异步向我的 Angular 应用程序提供数据;有少量数据必须以精确的 (1Hz) 间隔推送。任何关于我如何实现这一点的建议将不胜感激! (我知道另一种方法是在 1Hz 下使用计时器和 http.get(),但我真的想避免这样的设计。)

标签: node.js angular sockets tcp


【解决方案1】:

如果您像这样设置后端,您可以使用 ng2-socket-io 模块客户端与服务器通信。 https://www.npmjs.com/package/ng2-socket-io

var net = require("net");
var tcpServer = net.createServer();
var datas = [];
var sockets = [];

tcpServer.on('connection', function(socket){
    console.log('connection established');
    sockets.push(socket);
    socket.setEncoding('utf8');
    socket.on('data', function(data){
        console.log(data);
    });
});

tcpServer.listen(3333, '127.0.0.1');

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2021-06-09
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多