socket.io 解决浏览器兼容性(WebSocket)

这篇具有很好参考价值的文章主要介绍了socket.io 解决浏览器兼容性(WebSocket)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

socket.io 解决浏览器兼容性(WebSocket)

         在上一篇讲了 npm 上最流行的 WebSocket 库之一的 ws 库,那么本篇就来讲另外一个,就是 socket.io 库,socket.io 其实是一个兼容方案,当浏览器不支持 H5 的情况下就不能够使用上一篇内容讲的 WebSocket ,只能采用其他的方案,socket.io 就解决了关于浏览器的兼容。

Node实现 Socket 通信   |    WebSocket 通信 —— 浏览器原生支持

        Socket.io 库地址:  Socket.IO 

下面来使用 socket.io 库来实现服务器与客户端的通信:

引入 Socket.io

         打开 CMD 命令窗口切到待定目录下,使用如下命令进行安装 socket.io 库;

npm i socket.io

socket.io 解决浏览器兼容性(WebSocket)

安装完成这里仅需要从 node_modules 中去找到一个 socket.io.js文件,路径如下:(后面会用到)

/node_modules/socket.io/client-dist/socket.io.js

—— 客户端

        这里的客户端界面还是使用前面所用的 html文件,使用script标签引入 socket.ios.js 之后就来进行与服务端接口的连接操作;这里为了不与 html 文件搞混,将其分离出来使用script标签引入;

SocketIO.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./socket.io.js" type="text/javascript"></script>
    <script src="./SocketIOClient.js"></script>
    <style>
        .chatroom{
            height: 400px;
            width: 220px;
            border: 1px solid blue;
            padding: 5px;
            overflow: scroll;
        }
        .footer{
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <h3>Socket.IO 客户端</h3>
    <div id="chatroom" class="chatroom"></div>
    <div class="footer">
        <input type="text" name="sayinput" id="sayinput" value="" />
        <input type="button" name="send" id="sendbutton" value="发送" />
    </div>
</body>
</html>

SocketIOClient.js 文件 —— 接入服务端

var iosocket = null
window.onload = function () {
    // 连接
    iosocket = io.connect('http://127.0.0.1:9000')
    iosocket.on('connect',function(){
        iosocket.send('— — 已上线 — —')
    }) 
    // 收集
    iosocket.on('message',function(message){
        var chatroom = document.querySelector('#chatroom');
        chatroom.innerHTML += '<br/>' + message
    })
    // 关闭
    iosocket.on('disconnect',function(){
        console.log('服务器关闭');
    })
    // 发送
    function send(){
        iosocket.send(sayinput.value)
        sayinput.value = ''
    }
    // 回车
    document.onkeyup = function (event) {
        if (event.key = '13'){
            send()
        }
    }
    // 按钮
    sendbutton.onclick = function () {
        send()
    }
}

        内容与之前讲过WebSocket的一些操作没有太大的差异处理,这里也不再过多赘述!

—— 服务端

安装 express 框架socket.io 解决浏览器兼容性(WebSocket)

引入 socket.io 

var socket = require('socket.io')
// 服务端
// var app = require('express')()
var express = require('express')
var app = express()
var http = require('http').Server(app)
// var socket = require('socket.io')
// var io = socket(http)
var io = require('socket.io')(http)
var fs = require('fs');

app.get('/', function (req, res) {
  function callback(data) {
    res.send(data.toString())
  }
  fs.readFile('./SocketIo.html', function (err, data) {
    if (err) {
      console.log(err);
      callback('文件不存在')
    } else {
      callback(data)
    }
  })
})

// socket.io设置
// 在线用户
var onlineUsers = {}

var i = 0

io.on('connection', function (socket) {
  console.log('有人连上来了~');
  //监听新用户的加入
  socket.name = '用户' + ++i
  onlineUsers[socket.name] = socket

  // 监听用户退出
  socket.on('disconnect', function () {
    console.log('有人退出');
    delete onlineUsers[socket.name]
  })

  // 监听用户发布聊天内容
  socket.on('message', function (msg) {
    broadcast(msg, socket)
  })
})

function broadcast(msg, socket) {
  for (var key in onlineUsers) {
    onlineUsers[key].send(socket.name + ' : ' + msg)
  }
}

http.listen(9000, function () {
  console.log('Port:9000 | Running ...');
})

        以上这么写会有什么问题,下面来测试一下:

socket.io 解决浏览器兼容性(WebSocket)

         服务端正常运行,下来来看一下客户端,通过浏览器访问 http://127.0.0.1:9000 ,会出现的是客户端的网页HTML文件(./SocketIO.html);

socket.io 解决浏览器兼容性(WebSocket)

        可以使用静态资源进行托管,即在创建一个public文件夹,将托管文件放置到该文件夹下,使用如下命令:

app.use(express.static('public'))

         或者也可以这样,设置 app.get('/...') 这样的形式访问:

app.get('/SocketIOClient.js',function(req,res){
  fs.readFile('./public/SocketIOClient.js',(err,data)=>{
    res.send(data)
  })
})
app.get('/socket.io.js',function(req,res){
  fs.readFile('./public/socket.io.js',(err,data)=>{
    res.send(data)
  })
})

script标签
    <script src="./socket.io.js" type="text/javascript"></script>
    <script src="./SocketIOClient.js"></script>

        这里需要注意的就是这个script的请求路径问题了,在之前讲静态资源托管讲过了,可以回去翻阅温故,下面来测试一下:

socket.io 解决浏览器兼容性(WebSocket)socket.io 解决浏览器兼容性(WebSocket)

        再来开启一个客户端,使 用户2 上线:         

socket.io 解决浏览器兼容性(WebSocket)

         分别来进行发送信息:

socket.io 解决浏览器兼容性(WebSocket)

        以上就是本篇的全部内容了,感谢大家的支持!如果前面有不理解的最后面附上完整的代码,需要注意的是相应的依赖包需要自行下载,express 和 socket.io :

// var app = require('express')()
var express = require('express')
var app = express()
// var http = require('http')
// var server = http.Server(app) 
var server = require('http').Server(app)
// var socket = require('socket.io')
// var io = socket(http)
var io = require('socket.io')(server)
var fs = require('fs');

// app.use(express.static('public'))

app.get('/', function (req, res) {
  function callback(data) {
    res.send(data.toString())
  }
  fs.readFile('./SocketIo.html', function (err, data) {
    if (err) {
      console.log(err);
      callback('文件不存在')
    } else {
      callback(data)
    }
  })
})

app.get('/SocketIOClient.js',function(req,res){
  fs.readFile('./public/SocketIOClient.js',(err,data)=>{
    res.send(data)
  })
})
app.get('/socket.io.js',function(req,res){
  fs.readFile('./public/socket.io.js',(err,data)=>{
    res.send(data)
  })
})

// socket.io设置
// 在线用户
var onlineUsers = {}

var i = 0

io.on('connection', function (socket) {
  console.log('有人连上来了~');
  //监听新用户的加入
  socket.name = '用户' + ++i
  onlineUsers[socket.name] = socket

  // 监听用户退出
  socket.on('disconnect', function () {
    console.log('有人退出');
    delete onlineUsers[socket.name]
  })

  // 监听用户发布聊天内容
  socket.on('message', function (msg) {
    broadcast(msg, socket)
  })
})

function broadcast(msg, socket) {
  for (var key in onlineUsers) {
    onlineUsers[key].send(socket.name + ' : ' + msg)
  }
}

server.listen(9000, function () {
  console.log('Port:9000 | Running ...');
})

socket.io 解决浏览器兼容性(WebSocket)文章来源地址https://www.toymoban.com/news/detail-419941.html

到了这里,关于socket.io 解决浏览器兼容性(WebSocket)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字体格式选择与浏览器兼容性分析

    Web字体是我们在使用网页时经常会用到的元素之一,它可以用于显示文本、标题、按钮等。在Web字体中,最常用的格式是CSS字体。CSS字体是一种用于定义Web字体的格式,它可以让Web设计师更加灵活地控制字体的外观和样式。在本文中,我们将介绍几种常见的Web字体格式以及它

    2024年02月03日
    浏览(31)
  • vue如何进行跨浏览器兼容性处理

    让我来和你聊一聊如何让你的Vue应用在不同的浏览器和操作系统上正常运行。 首先呢,我们要知道一个事实:不同的浏览器有不同的特点和偏好,就像每个人都有独特的个性和习惯一样。你想要让你的应用在每个人的浏览器上都正常运行,就要像交朋友一样,要尊重每个浏览

    2024年02月07日
    浏览(31)
  • IE浏览器兼容性视图设置数据解析

    兼容性视图设置注册表位置: HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerBrowserEmulationClearableListDataUserFilter 数据类型:REG_BINARY 数据结构: 一、数据头 8字节前缀(固定值:“411F00005308ADBA”) 4字节网址数目(低位字节在前) 4字节数据段长度(数据段长度(含自身长度4),

    2024年02月06日
    浏览(46)
  • vite项目低版本浏览器兼容性问题

    技术: vite+vue3.2+ts+element-plus 开发环境没有问题,但是打包后的代码放到正式环境,页面空白... 现场的小伙伴发来报错问题  Uncaught SynntaxError:Unexpected token ? 纳尼,这这这...什么原因,一头雾水 用火狐浏览器访问,没有报错,开始狂摆...时间一点点流逝,全网没有找到解决

    2024年02月09日
    浏览(28)
  • Qt 嵌入Vue项目 flapMap 浏览器兼容性问题

    最近有个需求,Qt工程需要嵌入vue项目,本来是很简单的事情。在我的PC上启动Vue项目,同事PC上用浏览器通过IP地址可以正常加载vue项目,但用Qt嵌入总是失败。问题定位步骤如下: 1)换了一个简单的vue项目,发现没有问题,Qt工程能正常加载vue项目 2)由于Qt不像浏览器那样

    2024年02月12日
    浏览(29)
  • html学习笔记12-HTML5、浏览器兼容性问题

    https://www.runoob.com/html/html5-intro.html HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。 HTML5的设计目的是为了在移动设备上支持多媒体。 HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持

    2024年02月11日
    浏览(29)
  • 8 款浏览器兼容性测试工具介绍,需要的赶紧收藏吧

    目录 前言 1、IETester 2、BrowserShots 3、Spoon Browser Sandbox 4、Browserstack 5、LambdaTest 6、Browserling 7、CrossBrowser Testing 8、Browsera 浏览器的兼容性问题,是指不同浏览器使用内核及所支持的HTML等网页语言标准不同,用户客户端的环境不同造成的显示效果不能达到理想效果。对于用户而言

    2024年02月13日
    浏览(25)
  • 体验DIY物联网浏览器(谷歌内核兼容性好支持H264视频播放)

    一、功能及快捷键说明(说明32位兼容64位,更多版本往下看) 功能及快捷键图说明,不可多得的浏览器,支持右键自定义菜单... 说明:以上功能图快捷键是基于最新版的调整制作,如有差异以实际版本为准,其他问题请留言    二、下载安装包 2.1 100.0.230版本 9i物联网浏览

    2024年02月09日
    浏览(39)
  • h5逻辑_解决h5页面嵌入ios兼容性问题

    安全区域 如下图所示~ 蓝色部分为安全区域。处于安全区域内的内容不受圆角、齐刘海、小黑条的影响。 若是将h5页面嵌入app中,就需要进行适配— 让h5页面展示在安全区域内。 tips: 安全区域是在ios11之后并且是iPhoneX及以上机型才有的。 因此我们只需适配以上机型其余机型

    2024年02月14日
    浏览(63)
  • 【H5】H5安卓、ios兼容性问题

    H5在安卓机型和IOS机型或者相同机型的不同浏览器中的某些样式会存在不一样的表现,所以需要解决相应的兼容性问题 1、IOS端兼容input光标高度 问题症状:input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上当点击输入的时候,光标的高度和父盒子的高度一样

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包