2016-11-15 5 views
1

我々はWebSocketをinversify特急-utilsのに基づいて、当社のtypescriptですアプリケーションを拡張するために接続しようが、ない運これまで:ts-node server.tsで期待通りinversify-express-utilsを使用して、WebSocketをどのように統合できますか?

import 'reflect-metadata'; 
import {interfaces, InversifyExpressServer, TYPE} from 'inversify-express-utils'; 
import { Kernel } from 'inversify'; 
import {UserController} from './controller/UserController'; 
import TYPES from './constant/types'; 
import * as socketIo from 'socket.io'; 

// set up kernel 
let kernel = new Kernel(); 

// create server 
let server = new InversifyExpressServer(kernel); 
kernel.bind<interfaces.Controller>(TYPE.Controller).to(UserController).whenTargetNamed(TAGS.UserController); 
server 
    .build() 
    .listen(3000, 'localhost',() => console.log('listening on http://localhost:3000')); 

// try to setup a socket io based websocket 
let io = socketIo(server); 
io.on('connect', (socket) => console.log('"connect" executed')); 
io.on('connection', (socket) => console.log('"connection" executed')); 

サーバーが起動しません。 しかし、私はこのWebソケットに接続できません。たとえば、暗いウェブソケットターミナルのクロムプラグインと実行\connect localhost:3000のようないくつかのツールでそれを試してみてください。

+0

こんにちは、私はInversifyJSチームにこの問題を報告していると我々はhttps://github.com/inversify/InversifyJS/issues/413でそれを調査している私たちは決してありませんexpress utilsでWebソケットを使用していましたが、これは不足している機能ですが、私はあなたの更新を続けます。 –

+0

あなたの返事をありがとう。 [InversifyJS/issues/413](http://github.com/inversify/InversifyJS/issues/413) –

答えて

3

私は以前も同様の問題を抱えています。ここでは私のために働いていたものです。

let server: interfaces.InversifyExpressServer = new InversifyExpressServer(kernel); 

server.setConfig((app) => { 
    ... 
    app.use(helmet()); 
    ... 
}); 

let app = server.build(); 

let instance: any = app.listen(config.url.port); 
console.log(`Server started on port ${config.url.port} :)`); 


let socketIO = SocketIO.listen(instance); 
socketIO.on('connection', (socket: SocketIO.Server) => { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data: any) { 
     console.log(data); 
    }); 
}); 

exports = module.exports = app; 

あなたが見ることができるように、あなたはあなたがそれに上でSocket.IOを添付することができます前に、あなたの特急サーバーの実行中のインスタンスを作成する必要があります。 server変数では不十分です。これがあなたに役立つことを願っています。

敬具
....実施例はhttps://github.com/dkellenb/inversify-express-utils-websockets問題で見つけることができサイモン

+0

このソリューションが動作していることを確認できます。ありがとう! –

2

されました:

  • Serverラッパーは、アプリ
  • の周りに作成する必要が聞くべきです高速サーバー上で起動しました
  • テスト接続文字列は次のようになります。
    ws://localhost:3000/socket.io/?EIO=3&transport=websocket

コードスニペットは:

// server.build() actually returns an Express.Application instance 
let app = server.build(); 

// socket.io expects an http.Server versus a InversifyExpressServer 
// see http://socket.io/docs/#using-with-express-3/4 
let httpServer = require('http').createServer(app); 
httpServer.listen(3000); 

// create socket.io 
let io = socketIo(httpServer); 
関連する問題