![](/img/trans.png)
[英]I can't connect to my websocket because its handshake Sec-WebSocket-Accept header value is incorrect
[英]Can't connect to my WebSocket from within my Angular2 app
嘿
我有一个使用Node.js / Electron / Angular2(TypeScript)的应用程序。 使用socket.io我创建了一个WebSocket。 只要我不在Angular2应用程序中,一切都可以正常工作。
我整天试图让它运行起来,但是没有运气。 我下载了有效的教程,但找不到缺少的链接。 让我发狂!
错误-不会停止编译-我得到的是root.component.ts(14,17): error TS2304: Cannot find name 'io'.
。
如何摆脱该错误? 或者更好:在Angular2内部进行这种网络套接字通信的最佳实践是什么?
提前致谢。
现在,我以这种方式解决了这个问题:
$ tsd install socket.io-client
和 ///<reference path="../../typings/socket.io-client/socket.io-client.d.ts"/>
。 $ npm install --save socket.io-client
和 <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.