首页 > 语言 > JavaScript > 正文

socket.io学习教程之深入学习篇(三)

2024-05-06 15:17:47
字体:
来源:转载
供稿:网友

前言

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)) : 通过函数判断源是否允许

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选