步骤
类比之前express项目中的使用,有以下几个步骤
cnpm i -S koa-socket
const IO = require( 'koa-socket' )
const io = new IO()
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>