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>
相關說明
- 如果有沒有講到的,參考前文