• socket 版本的坑


    https://wenda.workerman.net/question/2966

    http://www.rfcreader.com/#rfc6455_line2178

    http://www.zhuyuntao.cn/%e5%9f%ba%e4%ba%8enode%e5%ae%9e%e7%8e%b0websocket%e9%80%9a%e4%bf%a1/

    场景复现条件:

    后端server socket.io  version 2.2.0

    前端原生 WebSocket api发送链接请求。报错

    index.html:23 WebSocket connection to 'ws://127.0.0.1:3000/' failed: Connection closed before receiving a handshake response。

    恢复可用的条件一:

    前端改用同版本  https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js  

    var socket = io('http://localhost:3000');
     socket.on('connect', function(){console.log('io-connect ');});
     socket.on('event', function(data){console.log('io-event start');});
     socket.on('disconnect', function(){console.log('io-event disconect');});

    正常访问。

    恢复可用的条件二:

    前端保持不变,后端改用ws插件,不再使用socket.io插件。

    const WebSocket = require('ws');
    const wss = new WebSocket.Server({ port: 3000 });
    wss.on('connection', function(ws) {
          console.log('connected');
          ws.on('message', function(message) {
                 console.log('received: %s', message);
          });
          ws.send('something');
    });
    wss.on('disconnection', function(ws) {
         console.log('disconnected');
    })

    正常访问。

    但是报错的原因是什么呢? 找原因开始。。。。

    看报错是 WebSocket 类发出的提示,意思是 失败:连接在接收握手响应之前关闭

    是前后端握手过程失败,为啥会握手失败呢?

    服务端解包失败,到时握手失败,服务端应该会有提示,Error  decoding a packet.

    查看文档发现 socket 和 websocket 是两种socket链接,用了不同的算法。

    如果用websocket 访问 socket 服务如果对方不支持 WebSocket解析,将无法支持握手链接。

    就算是这样的原因,那socket.io 客户端也用的时候是可以通信的,socket.io 转换了WebSocket的请求吗?

    继续查看源码实现,搜索全部error过滤出那个错误,go on

    引入了socket.io-parser 

    好深。

    没看出为啥,请大神路过给个重点。未完待续

    -------------------------------------------- 2019/9/3

  • 相关阅读:
    jmeter函数 助手
    虚拟机如和 连接网络
    Loadrunner如何进行有效的IP欺骗
    JMeter生成HTML性能报告
    关于interrupt(),interrupted(),isInterrupted()用法分析
    我的博客----我的大学
    基本排序算法总结
    多个线程之间的通信问题
    多线程同步问题
    第三十七章 : 奇珍异宝
  • 原文地址:https://www.cnblogs.com/the-last/p/11454920.html
Copyright © 2020-2023  润新知