精华内容
下载资源
问答
  • 问题描述websocket连接失败后多久会触发error事件?这个时间有没有方法可以设置问题出现的环境背景最近项目中用到了websocket,但是连接地址的端口不确定,因此前端需要从某个端口(例如ws://127.0.0.1:9000)开始累加...

    问题描述

    websocket连接失败后多久会触发error事件?这个时间有没有方法可以设置

    问题出现的环境背景

    最近项目中用到了websocket,但是连接地址的端口不确定,因此前端需要从某个端口(例如ws://127.0.0.1:9000)开始累加去建立连接,然后通过onerror事件判断连接是否成功,但运行时发现从尝试连接到连接失败触发error事件的时间比较久,大概需要1s。这样如果枚举100次才连接成功,就需要占用100s的时间,效率太慢不可行。function connectWebSocket(port = 9900) {

    return new Promise((resolve, reject) => {

    if (ws && ws.readyState === WebSocket.OPEN) {

    resolve(ws)

    } else {

    // 尝试建立连接

    console.log('connect', '-------', Date.now())

    ws = new WS(`ws://127.0.0.1:${port.toString()}`)

    ws.onopen = () => {

    // 连接成功

    console.log('open', '-------', Date.now())

    resolve(ws)

    }

    // 连接失败触发回调

    ws.onerror = () => {

    console.log('error', '-------', Date.now())

    reject()

    }

    }

    }).catch(() => {

    // 累加端口重建websocket

    if (port < 65534) {

    const newPort = port + 1

    return connectWebSocket(newPort)

    } else {

    ws.close()

    ws = null

    throw new Error('无法连接服务器')

    }

    })

    }

    ca04d936f34d0332ac33c56609a0b8b5.png

    尝试方法

    运行发现open事件大概在建立连接20ms后触发,所以我试图通过setTimeout的方式来代替error事件,代码如下:function connectWebSocket(port = 9900) {

    return new Promise((resolve, reject) => {

    // 加入isOpen变量来websocket是否握手成功

    let isOpen = false

    if (ws && ws.readyState === WebSocket.OPEN) {

    resolve(ws)

    } else {

    console.log('connect', '-------', Date.now())

    ws = new WS(`ws://127.0.0.1:${port.toString()}`)

    ws.onopen = () => {

    // 握手成功设置标识为true

    isOpen = true

    console.log('open', '-------', Date.now())

    resolve(ws)

    }

    // 需要确保定时器的回调在open事件之后执行

    setTimeout(() => {

    console.log(5, '-------', Date.now(), isOpen)

    if (!isOpen) {

    // 如果isOpen为false,说明没有握手成功,接着递归建立连接

    ws.close()

    reject()

    }

    }, 20)

    // ws.onerror = () => {

    // console.log('error', '-------', Date.now())

    // reject()

    // }

    }

    }).catch(() => {

    if (port < 65534) {

    const newPort = port + 1

    return connectWebSocket(newPort)

    } else {

    ws.close()

    ws = null

    throw new Error('无法连接服务器')

    }

    })

    }

    通过以上代码可以把判断是否需要重连的时间压缩到20ms左右,但问题在于我不确定open的触发时机能不能保证在20ms内(可能与电脑性能有关?)。

    这种方式是否可行呢,或者定时器的时间设置为多少比较合适。

    展开全文
  • WebSocket无法连接问题

    千次阅读 2021-10-21 10:48:42
    rosbridge连接不稳定问题 问题描述: Windows端web连接Ubuntu端rosbridge server,出现有时能连上有时连不上的问题。 最近一次发生连接不上的情况是,前一天可以连接成功,第二天,重新启动rosbridge server,从...

    问题描述:

    最近在研究rosbridge,其原理如下图,浏览器与rosbridge server也是通过WebSocket连接的,但发现有连接不上的情况。
    在这里插入图片描述


    原因:

    情况 1: 做服务器的PC IP地址变更,导致原IP连接不上。是因为做服务器的PC用了DHCP自动分配IP的方式,自动分配的IP有一定的时限,超过一定时限后变更IP。改为手动设置IP,设为固定IP地址可以解决此问题。
    情况2: 有一台PC做服务器,发现无论如何都连接不上,发现是防火墙的原因,防火墙只开放了有限的端口给外部访问,通过关闭防火墙或者开发要访问的接口后,该问题得到解决。

    WebSocket握手阶段,client端发送http GET请求,如果服务器防火墙进行了拦截,将无法发出此请求,client端或者server端都将抓不到此http请求数据

    CURL工具发送http请求
    CURL 发送http请求


    WebSocket协议

    WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接。我们来看看WebSocket连接是如何创建的。

    首先,WebSocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求,格式如下:

    GET ws://localhost:3000/ws/chat HTTP/1.1
    Host: localhost
    Upgrade: websocket
    Connection: Upgrade
    Origin: http://localhost:3000
    Sec-WebSocket-Key: client-random-string
    Sec-WebSocket-Version: 13
    

    该请求和普通的HTTP请求有几点不同:

    GET请求的地址不是类似/path/,而是以ws://开头的地址;
    请求头Upgrade: websocket和Connection: Upgrade表示这个连接将要被转换为WebSocket连接;
    Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据;
    Sec-WebSocket-Version指定了WebSocket的协议版本。

    随后,服务器如果接受该请求,就会返回如下响应:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: server-random-string
    

    该响应代码101表示本次连接的HTTP协议即将被更改,更改后的协议就是Upgrade: websocket指定的WebSocket协议。
    现在,一个WebSocket连接就建立成功,浏览器和服务器就可以随时主动发送消息给对方。消息有两种,一种是文本,一种是二进制数据。通常,我们可以发送JSON格式的文本,这样,在浏览器处理起来就十分容易。

    来源: WebSocket


    wireshark抓取到的数据

    WebSocket握手阶段,发出的请求与回应信息
    在这里插入图片描述
    请求:
    在这里插入图片描述
    回应:
    在这里插入图片描述
    遗留问题:
    更换服务器端口后,可以建立连接,但是抓取不到请求与回应数据,暂无解

    展开全文
  • Websocket出现的错误

    千次阅读 2020-12-23 22:12:28
    前端使用sockjs,后台使用spring的websocket框架结果在一个网络较慢的地方,发现tomcat报错信息:Oct 28, 2015 10:10:43AM org.apache.catalina.core.StandardWrapperValve invokeSEVERE: Servlet.service()for ...

    前端使用sockjs,后台使用spring的websocket框架

    结果在一个网络较慢的地方,发现tomcat报错信息:

    Oct 28, 2015 10:10:43AM org.apache.catalina.core.StandardWrapperValve invoke

    SEVERE: Servlet.service()for servlet [mvc-dispatcher] in context with path [/rscc] threw exception [Request processing failed; nested exception is org.springframework.web.socket.sockjs.SockJsException: Uncaught failure in SockJS request, uri=http://xxx/user/854/qckzogtf/xhr_streaming; nested exception is org.springframework.web.socket.sockjs.SockJsException: Uncaught failure for requesthttp://xxx/user/854/qckzogtf/xhr_streaming; nested exception is java.lang.IllegalArgumentException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "true" to servlet and filter declarations in web.xml. Also you must use a Servlet 3.0+ container] with root cause

    展开全文
  • 我的错误显示在浏览器的控制台中:"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"我正在使用Spring Websockets 4.1.5和Tomcat 8.0.18....

    我的错误显示在浏览器的控制台中:

    "WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"

    我正在使用Spring Websockets 4.1.5和Tomcat 8.0.18.我的WebSocketConfigurer实现类如下所示:

    @Configuration

    @Controller

    @EnableWebSocket

    public class WebSocketConfig implements WebSocketConfigurer

    {

    class MyHandler implements WebSocketHandler

    {

    @Override

    public void afterConnectionEstablished(WebSocketSession session) throws Exception

    {

    System.out.println("afterConntectionEstablished called");

    }

    ...implements rest of functions with a System.out.println and false for supportsPartialMessages()

    }

    }

    @Override registerWebSocketHandlers(WebSocketHandlerRegistry registry)

    {

    registry.addHandler(myHandler(), "myHandler").withSockJS();

    }

    @Bean

    public WebSocketHandler myHandler()

    {

    return new MyHandler();

    }

    }

    我的testWebsocketClient.js尝试连接此代码,但错误代码为200:

    websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");

    我无法弄清楚下一步该尝试什么.我以为这会导致afterConnectionEstablished(WebSocketSession会话)方法被触发?代码200不好吗?

    展开全文
  • 本文为joshua317原创文章,转载请注明:转载自joshua317博客HTTPS站点使用WebSocket错误及解决方案 - joshua317的博客 HTTPS站点使用WebSocket错误及解决方案 1.在https下使用ws,提示不安全 第一个问题:在...
  • 排查WebSocket连接不稳定的问题

    千次阅读 2021-11-24 20:46:12
    项目中遇到的WebSocket连接总是不稳定的问题,记录分析过程及解决办法。
  • WebSocket 接入错误

    千次阅读 2021-12-16 11:02:00
    1、浏览器调用 wss://192.168.1.13:2000 的服务器测试接口与 连接失败。 可能是浏览器未导入 自己生成的ssl证书导致失败。 谷歌浏览器导入服务器的签名证书就行了。
  • WebSocket 1005 错误 分析

    千次阅读 2021-11-17 16:29:29
    WebSocket 1005 的错误可以忽略 通常websocket是正常关闭的情况下一般是1000,1001 是前端页面刷新或者关闭浏览器引起的,1005 是因为某种外部因素造成websocket不能进行正常关闭引起的。 我们在postman做一个测试看...
  • WebSocket处理错误

    2021-02-28 11:09:23
    本篇文章帮大家学习WebSocket处理错误,包含了WebSocket处理错误使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。当在客户端和服务器之间建立了连接,就会从Web Socket实例触发open...
  • WebSocket 连接失败,报错400 WebSocket握手期间出错,响应码:400。 出现原因:可能你的应用程序版本低于nginx。 我的解决方式:告诉nginx在和服务端通信的时候,使用http/1.1,并且Nginx当想要使用WebSocket时由...
  • vue websocket 连接实战及遇到的问题

    千次阅读 2020-12-23 22:12:23
    常规的连接方法websocket () {let ws = new WebSocket('ws://localhost:8080')ws.onopen = () => {// Web Socket 已连接上,使用 send() 方法发送数据ws.send('Holle')console.log('数据发送中...')}ws.onmessage...
  • Spring Websocket连接失败

    2021-02-28 08:58:24
    我使用spring web socket api在我的应用程序中实现Web Socket连接 .... 但是,连接有时停止,我看到下面的错误,其中有连接失败 .DEBUG [http-nio-8222-exec-9] [138F0E344FB38D5997135FD3BEF59...
  • 写好websocket以后测试一直连接失败,但是后台没有反应,在网上查了很多资料都没有解决 最后查了好久发现websocket的请求受到拦截器的影响,添加白名单就可以了,网上websocket代码很多我就不贴了,贴一下白名单的yml代码...
  • 我正在开发一个简单的应用程序,它只是应该连接到websocket服务器并发送简单的文本消息。我使用nv-websocket-client作为websocket的库。我似乎无法连接到...Android websocket连接失败public class MainActivit...
  • 项目中需要开发一个即时通讯功能,因此用到了websocket来实现双向通信,起初websocket接入点是在service层,因为要从页面发起请求接入,因此把接入点搬到了web层,此时启动项目后,进行连接测试时报错:因为在...
  • 通过js 用websocket 连接打印机 进行打印,已知打印机的端口是默认开的,通过PHP代码$s = fsockopen("192.168.1.122", ...这样打印是可以的,但通过JS的websocket连接就只打印头信息,是什么情况?js 代码是:ws ...
  • websocket报400错误

    2021-05-16 10:26:57
    解决方案 看了下讨论区说的方案,问题出现在nginx的配置文件,需要修改nginx.conf文件。在linux终端中敲入vim /etc/nginx/nginx.conf,找到... 第二行和第三行告诉nginx,当它想要使用WebSocket时,响应http升级请求。
  • WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 通信协议于2011年被 IETF 定为标准 RFC 6455,并由 RFC 7936 补充规范。WebSocket API 也被 W3C 定为标准。 WebSocket 使得客户端和服务器之间的...
  • You must send data by websocket after websocket is opened!
  • ,我有以下的JavaScript客户端代码:var connection = new WebSocket('ws://localhost:8080/OmegaThings/registerdevice');connection.onopen = function() {console.log("Socket has been opened state = " + ...
  • 我客户端是用c++写得websocket客户端我请求的地址是ws://127.0.0.1:100322 (我请求ws://echo.websocket.org这个是可以的说明客户端代码是没问题的 问题就在服务端)输出[1405476678:7805] NOTICE: Initial logging ...
  • Chrome 可能会抛出错误 400,因为它认为您正在尝试对 websocket 服务器进行跨域请求,并且认为您不太可能获得许可。要解决这个问题,您也只需从您的go-server为您的 html 提供服务。因此,将您的sock.go代码更改为:...
  • 问题: 现在我们想在 server-side 上发生异常时关闭 websocket 连接。我们希望将异常的消息和 callstack 传递给结束帧。 在 Startup.cs-File 中捕获异常: public void Configure(IApplicationBuilder app, ...
  • 一、WebSocket协议 WebSocket是HTML5下一种新的协议。 它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到...2. WebSocket需要像TCP一样,先建立连接连接成功后才能相互通信。 WebSo...
  • # 返回描述套接字错误的字符串 } $line = trim(socket_read($newclient, 1024)); # 读取客户端传过来的资源,并转化为字符串 socket_read的作用就是读出socket_accept()的资源并把它转化为字符串 $this->...
  • 我正在测试打开websocket和回声。 我试图在基于Linux的PC上运行,并在官方websocket网站'http://www.websocket.org/echo.html' 中使用示例代码进行测试。我只是将代码复制并保存为HTML文件。但是,当我访问 '...
  • Can't connect to websocket server..I use the exact same private.key and public.crt that I use with nginxThe cert is self-signed but works fine with the rest of the website over ...
  • websocket错误码盘点

    千次阅读 2021-01-12 16:06:36
    code附录 1000 正常关闭 当你的会话成功完成时...1002 协议错误 当因协议错误而关闭连接时发送这一代码 1003 不可接受的数据类型 当应用程序接收到一条无法处理的意外类型消息时发送这一代码 1004 保留 不要发送这一

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,191
精华内容 11,276
关键字:

websocket连接错误

友情链接: ATMega16_hw_files.rar