解决WebSocket的兼容性问题及过程

 更新时间:2025年12月16日 15:30:16   作者:smallbone  
本文介绍了如何解决WebSocket的兼容性问题,包括原生WebSocket和SockJS、Socket.IO等解决方案

解决WebSocket的兼容性

我们知道WebSocket是一种在服务器与客户端双向通讯的技术,使用原生的WebSocket可以最小化 服务器资源的使用并且为两者提供了一种统一的通信方式。

随着HTML5的普及,现代浏览器(IE10+)基本上都已经原生支持WebSocket了,下面是支持WebSocket协议的浏览器:

  • Internet Explorer 10
  • Firefox 6
  • Chrome 14
  • Safari 6.0
  • Opera 12.1
  • iOS Safari 6.0
  • Chrome for Android 27.0 但是对于旧的浏览器该如何实现WebSocket的功能呢?下面就介绍一下几种常见的解决方案:

1.SockJS

SockJS是一个JavaScript库,它为浏览器提供了一个类似WebSocket的对象。首先,它会优先使用原生的WebSocket;如果不支持,则使用streaming;如果streaming也不支持,则使用轮询(polling)。

下面是支持的浏览器概览:

  • SockJS-node
  • SockJS-erlang
  • SockJS-tornado
  • SockJS-twisted
  • SockJS-ruby
  • SockJS-netty
  • SockJS-gevent (SockJS-gevent fork)
  • SockJS-go

客户端的使用

首先加载SockJS库

<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>

库加载完后, 就可与SockJS服务器建立连接了

var sock = new SockJS('https://mydomain.com/my_prefix');
 sock.onopen = function() {
     console.log('open');
     sock.send('test');
 };

 sock.onmessage = function(e) {
     console.log('message', e.data);
     sock.close();
 };

 sock.onclose = function() {
     console.log('close');
 };

服务器端的使用(NodeJS)

首先,安装sockjs-node:

npm install sockjs

接着就可以通过监听事件来与客户端进行类似WebSocket的通信了

var http = require('http');
var sockjs = require('sockjs');

var echo = sockjs.createServer({ sockjs_url: 'http://cdn.jsdelivr.net/sockjs/1.0.1/sockjs.min.js' });
echo.on('connection', function(conn) {
    conn.on('data', function(message) {
        conn.write(message);
    });
    conn.on('close', function() {});
});

var server = http.createServer();
echo.installHandlers(server, {prefix:'/echo'});
server.listen(9999, '0.0.0.0');

2.Socket.IO

Socket.IO能够启用基于事件的双向通信,使用它同样也需要搭建相应的服务端;首先它也会首选WebSocket,如果不支持则会使用下面的替代方案:

  • Adobe Flash Socket(缺点:需要在服务器上打开一个额外的端口,默认为10843)
  • Ajax long polling
  • Ajax multipart streaming
  • Forever iframe
  • JSONP polling

浏览器兼容性

客户端

//加载Socket.IO库
<script src="http://localhost:8181/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect('http://localhost:8181');
        console.log('a user connected');
        socket.emit('my other event', { my: 'data' });
        socket.on('disconnect', function(){
        console.log('user disconnected');
    });
</script>

服务端

安装socket.io

npm install socket.io --save

配置服务器

var server = require('http').createServer();
var io = require('socket.io')(server);
io.on('connection', function(socket){
    socket.emit('news', { hello: 'world' });
    socket.on('event', function(data){});
    socket.on('disconnect', function(){});
});
server.listen(3000);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Node.js和PostgreSQL构建数据库应用

    使用Node.js和PostgreSQL构建数据库应用

    PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动应用,本文就来介绍一下使用Node.js中的`pg`库与PostgreSQL数据库进行交互,感兴趣的可以了解一下
    2025-09-09
  • nodejs下打包模块archiver详解

    nodejs下打包模块archiver详解

    这篇文章主要介绍了nodejs下打包模块archiver的使用方法,非常简单实用,这里推荐给有需要的小伙伴。
    2014-12-12
  • node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小

    node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小

    这篇文章主要介绍了node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小的相关资料,需要的朋友可以参考下
    2017-01-01
  • 教你彻底搞懂ESM与CJS互相转换

    教你彻底搞懂ESM与CJS互相转换

    这篇文章主要为大家介绍了ESM与CJS互相转换的理解与实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 如何使用axios库在Node.js中进行代理请求(实践案例)

    如何使用axios库在Node.js中进行代理请求(实践案例)

    axios是一个强大的基于Promise的HTTP客户端,它在浏览器和Node.js环境中均可使用,本文将介绍如何充分利用axios库,在Node.js中进行代理请求的最佳实践,并通过一个实际案例来展示其应用,感兴趣的朋友一起看看吧
    2024-03-03
  • node+axios实现下载外网文件到本地

    node+axios实现下载外网文件到本地

    这篇文章主要为大家介绍了node+axios实现下载外网文件到本地示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 解决node.js安装包失败的几种方法

    解决node.js安装包失败的几种方法

    nodejs安装包失败的原因可能有很多,下面这篇文章给大家整理三种方法来解决,大家可以试一试或许可以解决你的问题,下面来一起看一看。
    2016-09-09
  • 浅谈Node.js ORM框架Sequlize之表间关系

    浅谈Node.js ORM框架Sequlize之表间关系

    下面小编就为大家带来一篇浅谈Node.js ORM框架Sequlize之表间关系。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • node.js中的fs.statSync方法使用说明

    node.js中的fs.statSync方法使用说明

    这篇文章主要介绍了node.js中的fs.statSync方法使用说明,本文介绍了fs.statSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Node.js实现解析post请求的方法详解

    Node.js实现解析post请求的方法详解

    这篇文章主要为大家详细介绍了Node.js实现解析post请求方法的相关知识,文中的示例代码讲解详细,具有一定的学习价值,有需要的小伙伴可以了解下
    2024-04-04

最新评论