繁体   English   中英

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

[英]Can't connect to my WebSocket from within my Angular2 app

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

我整天试图让它运行起来,但是没有运气。 我下载了有效的教程,但找不到缺少的链接。 让我发狂!

  • 这是我的electron.js启动应用程序,创建websocket服务器端
  • 这是我的index.html,具有可运行的websocket,但作为本机JavaScript代码
  • 这是我试图使Websocket运行的Angular2的根组件

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

如何摆脱该错误? 或者更好:在Angular2内部进行这种网络套接字通信的最佳实践是什么?

提前致谢。

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

  1. 安装的socket.io-client $ tsd install socket.io-client
  2. 在我的main.ts文件中添加了类型输入引用///<reference path="../../typings/socket.io-client/socket.io-client.d.ts"/>
  3. 安装的socket.io-client Node.js模块$ npm install --save socket.io-client
  4. 将此模块添加到了我的index.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的帮助。

我要指出的是,如果您使用的是电子,则不应真正将electron.js视为服务器端。 它更多地是客户端启动器/引导程序,并且必须在每个客户端上运行。 您必须有一个单独的节点应用程序(在socket.io的情况下,我强烈建议这样做)才能真正使您的代码服务器端。

对于您的问题,您可以尝试在根组件中添加import io from 'socket.io-client'var io = require('socket.io-client') import io from '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';

暂无
暂无

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

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