Socket.io教程: koa集成socket.io

Koa集成Socket.io

步驟

類比之前express項目中的使用,有以下幾個步驟

  • 安裝:$ cnpm i -S koa-socket
  • 引入: const IO = require( 'koa-socket' )
  • 實例化:const io = new IO()
  • 接入koa: io.attach( app )
  • 配置服務端
  • 客戶端使用

後端演示

var Koa = require('koa'),
    router = require('koa-router')(),
    views = require('koa-views');

var url = require('url');

const IO = require( 'koa-socket' )
const io = new IO();

var app = new Koa();

io.attach( app );

app.use(views('views',{
    extension:'ejs'  /*應用ejs模板引擎*/
}))

router.get('/',async (ctx)=>{
   await ctx.render('index');
})

app.use(router.routes());   /*啓動路由*/
app.use(router.allowedMethods());

app._io.on( 'connection', socket => {
    console.log('建立連接了');

    var groupid = url.parse(socket.request.url,true).query.groupid;   // 獲取分組號

    // console.log(groupid);

    socket.join(groupid);  // 加入分組

    // 監聽客戶端連接
    socket.on('clientMsg',function(data){
        // console.log(data);

        // socket.emit('serverMsg','我是服務器,我給客戶端發送信息');  // 單播:單個socket互不影響,誰給我發的信息我回返回給誰

        // app._io.emit('serverMsg','我是服務器,我給客戶端發送信息');  // 廣播: 所有建立連接的客戶端

        // app._io.to(groupid).emit('serverMsg','我是服務器,我給客戶端發送信息'); // 發送給指定分組內的用戶 通知自己

        socket.broadcast.to(groupid).emit('serverMsg','我是服務器,我給客戶端發送信息'); // 通知指定分組用戶 不通知自己
    })
})

app.listen(3000);

前端演示

<script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script>

<input type="button" value="發送消息" onclick="sendMsg()"><br>

<script type="text/javascript">
    // 和服務器建立長連接
    var socket = io.connect('http://127.0.0.1:3000?groupid=1');

    // 接收服務器返回的信息
    socket.on('serverMsg',function(data){
        console.log(data);
    });

    function sendMsg() {
        socket.emit('clientMsg','clientMsg');
    }
</script>

相關說明

  • 如果有沒有講到的,參考前文
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章