您的位置:首页 > Web前端 > Node.js

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

2017-07-21 21:36 751 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: