前言
socket.io提供了基于事件的实时双向通讯,本文深入的介绍了socket.io,下面来看看详细的内容吧。
静态文件
socket.io默认情况下会通过socket.io-client包提供socket.io.min.js和socket.io.js.map下载
运行实例app.js
let app = require('http').createServer() let io = require('socket.io')(app)app.listen(3000); 浏览器访问http://localhost:3000/socket.io/socket.io.js可以加载压缩的源码,访问http://localhost:3000/socket.io/socket.io.js.map加载sourcemap
我们可以改变这种行为
禁用socket.io.js下载
方法1: 实例化时传入控制参数serveClient值false
let io = require('socket.io')(app, { serveClient: false})方法2: 调用函数serverClient
let app = require('http').createServer() let io = require('socket.io')() io.serveClient(false) io.listen(app) // 或者io.attach(app) 如果在调用函数前服务已绑定http.Server,该方法将不起作用
禁用后再次访问将提示{"code":0,"message":"Transport unknown"}
修改静态文件路径
socket.io.js路径可以改变,其默认路径为/socket.io。
实例化时传参
let io = require('socket.io')(app, { path: '/io'})调用函数path
let app = require('http').createServer() let io = require('socket.io')() io.path('/io') io.listen(app) 如果在调用函数前服务已绑定http.Server,该方法将不起作用
安全策略
socket.io提供了两种安全策略
allowRequest
函数allowRequest有两个参数,第一个参数为收到的握手包(http.request)对象,作为判断依据, success), err是错误对象,success为boolean, false表示阻止建立连接
前端请求带上token
let socket = io('http://localhost:3000?token=abc') socket.on('connect', () => { console.log('connect')})socket.on('connect_error', err => { socket.disconnect() console.log('connect_error', err)})后端allowRequest根据token判断是否继续
let app = require('http').createServer() let io = require('socket.io')(app, { allowRequest: (req, cb) => { if (req._query && req._query.token === 'abc') return cb(null, true) cb(null, false) }});origins
可以对源进行限制
1、实例化时限制源
let app = require('http').createServer() let io = require('socket.io')(app, { origins: 'http://localhost:3000'})2、origins函数设置源
origins函数有两种形式
origins(string) : 设置运行的源
origins(string, fn(err, success)) : 通过函数判断源是否允许
新闻热点
疑难解答
图片精选