【问题标题】:Koa-mount/router + socket.io integrationKoa-mount/router + socket.io 集成
【发布时间】:2017-08-21 14:34:14
【问题描述】:

出于好奇,我选择 Koa2 作为我的家庭节点服务器。不幸的是,我被困在为客户端/服务器通信实现 websockets 上。在以下应用程序中,socket.io 客户端拒绝连接到其服务器部分。任何想法/提示?

// main.js
const argv = require('yargs');
const app = require('./src/app');
const conf = require('./config');

const port = argv.port || process.env.PORT || conf.port || 3000;

app.listen(port);

console.log(`IOKvit Server is listening on port ${ port }...`);

.....................

// app.js
const Koa = require('koa');
const mount = require('koa-mount');
const router = require('./api');
const staticRoutes = require('./static');

const app = new Koa();

app.use(mount(staticRoutes));
app.use(router.routes());
app.use(router.allowedMethods());

const http = require('http');
const socket = require('socket.io');

const server = http.createServer(app.callback());
const io = new socket(server);

io.on('connection', function(socket){
    console.log('a user connected')
});

module.exports = app;

.....................

// static.js
const Koa = require('koa');
const serve = require('koa-static');
const mount = require('koa-mount');
const path = require('path');

const staticApp = new Koa();
const root_dir = path.dirname(require.main.filename);

staticApp.use(serve(root_dir + '/static', { maxage: 60 * 1000 }));
staticApp.use(mount('/lib/vue', serve(root_dir + '/node_modules/vue/dist/', { maxage: 60 * 1000 })));
staticApp.use(mount('/lib/vue-material', serve(root_dir + '/node_modules/vue-material/dist/', { maxage: 60 * 1000 })));
staticApp.use(mount('/lib/vue-router', serve(root_dir + '/node_modules/vue-router/dist/', { maxage: 60 * 1000 })));
staticApp.use(mount('/lib/socket.io', serve(root_dir + '/node_modules/socket.io-client/dist/', { maxage: 60 * 1000 })));
staticApp.use(mount('/lib/roboto', serve(root_dir + '/node_modules/roboto-fontface/css/roboto/', { maxage: 60 * 1000 })));
staticApp.use(mount('/lib/material-icons-font', serve(root_dir + '/node_modules/material-icons-font/', { maxage: 60 * 1000 })));

module.exports = staticApp;

.....................

// api.js
const Router  = require('koa-router');
const house = require('./house').controller;

const router = new Router();

router.get('/rooms', house.list_rooms);
router.get('/rooms/:name', house.room);

module.exports = router;

【问题讨论】:

  • 你能简化一下吗?例如,静态位是否必要?您是否提供静态资源?中间件是否超过了这一点?
  • @akaphenom 所有静态资源似乎都可以毫无问题地交付。首先,我想使用 nginx 托管静态部分,但这似乎也没有通过套接字。是的,我已经尝试为在 nginx 的配置中传递的套接字设置所需的值。
  • 在您具备基本功能之前,我不会使服务器复杂化(不要引入 nginx)。老实说,我没有看到任何明显的错误。我假设您没有在套接字连接上收到控制台日志消息?
  • 客户端位是什么样的?
  • @akaphenom 是的,正是客户端上的 +,io() 对象返回“connected: false”

标签: javascript node.js socket.io koa koa2


【解决方案1】:

我在 Koa (1.0.0) 中使用了这样的代码:

const koa = require("koa");
const socketIo = require("socket.io");

const app = koa();
const port = 8000
const http = app.listen(port); 
const io = socketIo.listen(http); 

io.on("connection", function(socket){ 
  console.log("connected")
}) 

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2018-09-22
    • 2020-05-02
    相关资源
    最近更新 更多