![](/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.