Routing 使用膝关节炎和SOCKE.IO服务静态页面和聊天消息

Routing 使用膝关节炎和SOCKE.IO服务静态页面和聊天消息,routing,socket.io,koa,Routing,Socket.io,Koa,我使用膝关节炎和ock.IO来服务静态HTML页面和处理发送到socket的聊天消息。以下代码用作服务器:- var app = require('koa')(); var router = require('koa-router')(); var views = require('co-views'); var render = views('.', { map: { html: 'swig' }});

我使用膝关节炎和ock.IO来服务静态HTML页面和处理发送到socket的聊天消息。以下代码用作服务器:-

var app = require('koa')();
var router = require('koa-router')();
var views = require('co-views');
var render = views('.', { map: { html: 'swig' }});
                                                              <--- [1]
router.get('/', function *(next) {
    console.log('index.html');
    this.body = yield render('index.html');
});

app.use(router.routes());

var server = require('http').createServer(app.callback());    <--- [2]
var io = require('socket.io')(server);                        <--- [3]

io.on('connection', function(socket) {
    socket.on('chat message', function(msg, callback) {
        console.log('got message - ' + msg);
        io.emit('chat message', msg);
        if (callback) {
            callback();
        }
    });
});

server.listen(8080);

调用
app.callback()
时,将创建一个用于处理HTTP请求的回调函数。基于膝关节炎的源代码,它看起来像中间件堆栈加载到回调时,它被创建。因此,在创建回调后,将不会使用通过
use()
方法添加到堆栈中的任何其他中间件

遵循同样的逻辑;如果使用膝关节炎代码> > ListNEN(/Cuff>)方法,则在调用膝关节炎>代码>使用())< /代码>方法后,需要调用该方法。否则,这些中间件实际上不会位于服务器正在使用的中间件堆栈上

var io = require('socket.io-client');
var socket = io('http://localhost:8080');

socket.on('connect', function() {
    console.log('socket connected');

    socket.emit('chat message', 'hello world !!!!!!', function() {
        console.log('emit');
        socket.close();
    });
});

socket.on('disconnect', function() {
    console.log('socket disconnect');
});