无法从我的 Angular2 应用程序中连接到我的 WebSocket

Can't connect to my WebSocket from within my Angular2 app

本文关键字:我的 连接 WebSocket Angular2 应用程序      更新时间:2023-09-26

Hej 那里。

我有一个使用Node.js/Electron/Angular2(TypeScript)的应用程序。使用 socket.io 我创建了一个WebSocket。一切正常,只要我不在我的 Angular2 应用程序中。

我尝试了一整天来运行它,但没有运气。我下载了一个工作教程,但找不到缺少的链接。快把我逼疯了!

  • 这是我的电子.js启动应用程序,创建websocket服务器端
  • 这是我的索引.html带有工作 websocket,但作为本机 JavaScript 代码
  • 这是我的 Angular2 根组件,试图让 websocket 运行

错误 - wich 不会停止编译 - 我得到,是root.component.ts(14,17): error TS2304: Cannot find name 'io'..

我怎样才能摆脱这个错误?或者更好:在 Angular2 中,这种 websocket 通信的最佳实践是什么?

提前谢谢。

现在我以这种方式解决了这个问题:

  1. 已安装的 socket.io 客户端键入$ tsd install socket.io-client
  2. 添加了对我的 main.ts 文件///<reference path="../../typings/socket.io-client/socket.io-client.d.ts"/>的键入引用。
  3. 已安装 socket.io 客户端节点.js模块$ npm install --save socket.io-client
  4. 将此模块添加到我的索引中.html <script src="../node_modules/socket.io-client/socket.io.js"></script>

现在我可以简单地使用任何 Angular2 组件中的套接字,而无需添加任何额外的行。

socket = null;
constructor() {
    this.socket = io('http://localhost:8181');
    this.socket.on('news', function (data) {
        console.log(data);
    });
}

作为参考,这是我的主 Electron .js 文件中的服务器套接字代码:

var server = require('http').createServer(function(req, res) {})
    socket = require('socket.io')(server, {});
server.listen(8181);
socket.on('connection', function(socket) {
    socket.emit('news', {hello: 'world'});
    socket.on('my other event', function(data) {
        console.log(data);
    });
});

希望这对以后的任何人有所帮助。感谢Thierry Templier和dvlsg的帮助。

我会指出,如果你使用电子,你不应该真正考虑电子.js是服务器端。它更像是一个客户端启动器/引导程序,并且必须在每个客户端上运行。你必须有一个单独的节点应用程序(我强烈建议它,在socket.io的情况下)才能真正让你的代码服务器端。

至于您的问题,您可以尝试在根组件中添加import io from 'socket.io-client'var io = require('socket.io-client')(如有必要,在npm install socket.io-client之后)。

您需要

使用以下命令安装 socket.io 类型(请参阅此链接:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/socket.io/socket.io.d.ts):

$ tsd install socket.io

然后你需要导入它:

import * as io from 'socket.io';