使用inversify-express-utils,我怎样才能整合websockets?

我们尝试使用websockets来连接基于inversify-express-utils来扩展我们的打字稿应用程序,但到目前为止还没有运气:

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')); 

服务器按照预期与ts-node server.ts 。 但是我无法连接到这个networking套接字。 尝试了几个工具,例如Dark WebSocket Terminal chrome插件,并执行\connect localhost:3000 。 任何想法?

前段时间我有类似的问题。 这是什么为我工作:

 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; 

正如你所看到的,你必须创build一个正在运行的Express服务器实例,然后才能将Socket.IO附加到它上面。 你的servervariables是不够的。 我希望这会对你有用。

最好的祝福
西蒙

一个工作示例可以在https://github.com/dkellenb/inversify-express-utils-websocketsfind问题是&#xFF1A;

  • 服务器包装需要在应用程序周围创build
  • 应该在快递服务器上开始收听
  • testing连接string应如下所示:
    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); 
Interesting Posts