socket.io与node.js api 调用示例

来源:互联网 发布:阿里云ecs扩容 编辑:程序博客网 时间:2024/06/02 04:26

1.本文采用的socket.io.js是2.x版本,测试时请核对版本

2.官方文档链接地址如下
https://socket.io/docs/server-api/
https://socket.io/docs/client-api/
https://socket.io/docs/rooms-and-namespaces/

3.api示例

1.连接方式

客户端新建连接方式

    let socket = io('http://localhost:4000', {             transports: ['websocket'], query: {                  token: '123456'              }          }); //transports 为连接方式,默认为长轮询(polling) //query 为查询语句,可以传值

服务器端连接方式

const io = require('socket.io')(server(或者端口号), {  serveClient: false,//是否提供客户端文件  pingInterval: 10000,//请求间隔时间(ms)  pingTimeout: 5000,//连接超时时间,超时后自动关闭(ms)  cookie: false,//禁用缓存});
//备注:在以前客户端会采用io.connect("ws://localhost:4000/personal");之类的写法,但这样不支持https协议,需改成wss才支持.

2.服务器端建立连接前设定操作

//有很多时候,在建立连接之前我们会有些特殊条件才能建立,比如用户登录等等//服务器端代码如下,它会在用户建立连接时,优先执行这段代码,可以让我们选择是否建立连接.客户端建立连接代码参考第一点.io.use((socket, next) => {  let token = socket.handshake.query.token;  if (isValid(token)) {    return next();  }  return next(new Error('authentication error'));});

3.关于前后端数据交互

socket.io采用事件订阅形式进行前后端交互,如前端:soket.on('方法名',方法体);后端:io.emit('方法名','传参');

4.命名空间

//我们可以建立命名空间来实现多窗口,多群的互动,示例如下//客户端创建命名空间连接:const personalChat = io('/personal');//const personalChat = io('http://localhost:4000/personal');//服务器端创建命名空间const personalChat = io.of('/personal');personalChat .on('connection',(socket)=>{若干方法});//服务器端 用户加入某个房间  socket.join('roomName',方法体}); //离开某个房间  socket.leave('roomName',方法体);//服务器端,某个客户端向房间发送信息(可实现群聊)  io.to('roomName').emit('调用前端接收信息方法');

5.向指定客户端发送信息

      //服务器端代码      socket.on('say', (id,msg) => {      //发送给指定某人id,实现私聊(区别在于,第一种写法发送不到其他命名空间下)      socket.to(id).emit('msg', msg);      或      io.to(id).emit('msg',msg);      //发送给当前客户端      socket.emit('msg','msg');      //全站发送      io.emit('msg',msg);      //发送给所有客户端,包含当前客户端      socket.broadcast.emit('msg', msg);    });

6.关于重连和断开连接

//服务器端 socket.on('disconnect', (reason) => {    // 断开连接自动调用  });//数据包是否压缩socket.compress(true//true 为压缩//重连,默认情况下,是支持自动连接的,也可以使用socket.open手动打开.//重新连接事件reconnect_attempt