Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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
如何使用Node.js“;净额;类(或其他TCP后端)在角度应用程序中_Node.js_Angular_Sockets_Tcp - Fatal编程技术网

如何使用Node.js“;净额;类(或其他TCP后端)在角度应用程序中

如何使用Node.js“;净额;类(或其他TCP后端)在角度应用程序中,node.js,angular,sockets,tcp,Node.js,Angular,Sockets,Tcp,我不熟悉Node.js和Angular,我将用我的问题来证明这一点 在我所阅读的Angular教程中,我看到了“后端”部分使用Angular“服务”实现,该“服务”通过“ng c s myservice”创建,其中myservice成为可注入的,并添加到应用程序的提供商列表中。我看到的大多数示例要么使用本地测试数据存根实现此服务,要么通过对Mongo数据库之类的东西的http请求实现此服务 但是,我的(角度)应用程序需要连接到其后端的TCP服务器。使用http协议不是一个选项 我尝试的第一件事是

我不熟悉Node.js和Angular,我将用我的问题来证明这一点

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

但是,我的(角度)应用程序需要连接到其后端的TCP服务器。使用http协议不是一个选项

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

从'@angular/core'导入{Injectable};
@可注射()
导出类远程服务{
净=要求(“净”);
客户
服务器状态:字符串='未知';
端口号:51101;
IP='127.0.0.1';
构造函数(){
log('初始化远程客户端。调用'+this.IP+':'+this.PORT+'…');
this.client=this.net.createConnection({port:this.port},{host:this.IP},()=>{
log('已连接到服务器!!!');
});
}
}
。。。但这会导致浏览器控制台出现以下错误:

错误类型错误:此.net.createConnection不是函数

当我研究这个特定的错误时,通常的解释(简短的版本)是“你不能从浏览器上这么做。”(一个例子)

我想知道为什么你不能在“浏览器”中使用TCP或UDP或类似的协议。我不明白的是,作为我的后端的一部分如何被称为“浏览器”。有人能帮我澄清一下吗?(我是否误解了Angular的能力?)


是否可以在角度服务中使用,如果可以,如何使用?

如果您这样设置后端,您可以使用ng2 socket io模块客户端与服务器通信


Nodejs在后端(服务器)运行,在前端运行。您可能应该使用Angular的HttpClient:您的Angular应用程序没有“后端”。一切都在浏览器中运行。您的应用程序可能“连接”到后端,但这将是服务器上运行的另一个应用程序。也许这已经发生了,但您没有在问题中解释后端上运行的是什么以及如何连接到后端。因此,您有一个使用节点本机网络模块的TCP服务器。你说你不能使用http协议?在所有Websocket交互中都需要http握手。从Socket.io切换到net模块并不能解决您的问题,这是完全一样的。你能详细说明一下你的后台情况吗?@ChristianBenseler:你的回答概括了这一点:我想做的事是做不到的。我对Angular所说的“后端”的含义有一个根本性的误解(这就是它所说的“前端HTTP请求”)。我必须提供与HTTP服务器通信所需的(C++)服务(痛苦但可行),并在我的Angular应用程序中使用HttpClient;必须以精确(1Hz)的间隔推送少量数据。任何关于我如何实现这一目标的建议都将不胜感激!(我知道另一种选择是在1Hz频率下使用计时器和http.get(),但我确实希望避免这种设计。)
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');