精华内容
下载资源
问答
  • WebSocket多个浏览器页面群发消息只会发送给最新打开页面的问题
    千次阅读
    2021-11-30 10:48:24

    一般我们在连接的时候,设置的key都是以httpSessionId来作为key保存到本地

     @OnOpen
        public void onOpen(Session session, EndpointConfig config) {
            if (log.isDebugEnabled()) {
                log.debug("-------------websocket open--------------");
            }
            HttpSession httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
            String httpSessionId = httpSession.getId();
            if (log.isDebugEnabled()) {
                log.debug("httpSessionId:{}", httpSessionId);
            }
            SESSION_MAP.put(httpSessionId, session);
            AjaxResult success = AjaxResult.success();
            success.put("sessionId", httpSessionId);
    
        }

    但是就有可能有的浏览器限制了 httpSession是唯一的,这个时候我们拿到的key就是一致的,就会导致前面的连接会被后面的连接给“踢”掉。也就造成我们群发消息的时候,没有之前的会话;

    解决:

    改变本地存储会话的key 

    (1) 可以用唯一值(UUID之类的)

    (2) 设置key是session.getId()的值

    通过测试发现,session 对象里,id是唯一的,那么就可以从此处着手

      @OnOpen
        public void onOpen(Session session, EndpointConfig config) {
            if (log.isDebugEnabled()) {
                log.debug("-------------websocket open--------------");
            }
            String sessionId=session.getId();
            log.info("连接成功,最新连接的sessionId   SessionId:{}", sessionId);
    
            SESSION_MAP.put(session.getId(), session);
            AjaxResult success = AjaxResult.success();
            success.put("sessionId", sessionId);
    
        }

    更多相关内容
  • Websocket打开后即自动关闭解决方法 之前写小程序时遇到了一个问题,websocket一旦使用立马关闭,也不报错,但是也不运行,查了很多博客也没查出原因,后来无意中发现,是websocket不可以使用ssm的注入方式。 ...

    ​如何解决websocket 打开连接就立刻关闭
    之前写小程序时遇到了一个问题,websocket一旦使用立马关闭,也不报错,但是也不运行,查了很多博客也没查出原因,后来无意中发现,是websocket不可以使用ssm的注入方式。
    在这里插入图片描述

    ApplicationContext act = ApplicationContextRegister.getApplicationContext();
        UserService userService = act.getBean(UserService.class);
        HouseService houseService=act.getBean(HouseService.class);
    

    改成这种注入方式之后,websocket就可以正常运行了!

    展开全文
  • websocket.onmessage方法获取服务端推送消息,这时候打开一个新的tab窗口查看,同上也通过window.parent.webSocket获取到webSocket,相同的websocket.onmessage方法获取服务端推送消息,这时候上一个页面的onmessage...
  • HTML5给Web浏览器带来了全双工TCP链接WebSocket...javascript一、环境配置jdk7或者是更高版本javatomcat7或者更高版本web二者版本保持一致(32位or64位)ajax实现WebSocket技术须要的jar包api在tomcat7.0中都包含,w...

    HTML5给Web浏览器带来了全双工TCP链接WebSocket标准服务器的能力。浏览器和可以与服务器创建链接,经过已创建的通讯信道来发送和接收数据而不须要由HTTP协议入额外的开销。javascript

    一、环境配置

    jdk7或者是更高版本java

    tomcat7或者更高版本web

    二者版本保持一致(32位or64位)ajax

    实现WebSocket技术须要的jar包api

    在tomcat7.0中都包含,websocket-api.jar以及tomcat7-websocket.jar。tomcat7-websocket.jar是对websocket-api.jar的实现,二者缺一不可。浏览器

    二、Websocket-api介绍

    ServerApplicationConfig是websocket的程序入口,在tomcat启动时会自动启动,是websocket的核心配置类。tomcat

    ServerApplicationConfig中包含两个方法,其实这两个方法的核心都是过滤,筛选配置websocket的类。服务器

    getEndPointConfigs——经过实现类的方式获取全部配置websocket类websocket

    getAnnotatedEndpointClasses——经过注解的方式获取配置websocket类,扫描src下全部类@serverEndpoint注解的类session

    PS:Endpoint就是指一个websocket的一个服务端程序。

    本文也将采用注解的方式进行配置。

    import java.util.Set;

    import javax.websocket.Endpoint;

    import javax.websocket.server.ServerApplicationConfig;

    import javax.websocket.server.ServerEndpointConfig;

    /**

    * @ClassName: DemoConfig

    * @Description: 获取配置websocket的类

    * @author 贾文静

    * @date 2017-5-22 下午9:24:02

    *

    */

    public class DemoConfig implements ServerApplicationConfig

    {

    // 注解方式的启动

    public Set> getAnnotatedEndpointClasses(Set> scan)

    {

    //检测系统中的websocket类

    System.out.println("config......" + scan.size());

    // 返回 在服务端注册websocket类,过滤的做用

    return scan;

    }

    //实现类的方式

    public Set getEndpointConfigs(

    Set> arg0)

    {

    return null;

    }

    }

    三、创建通讯信道

    创建通讯信道是WebSocket技术实现的关键!

    服务端

    服务端建立一个websocket的链接请求,为了方便把服务端处理请求的几个方法一并书写

    import java.io.IOException;

    import javax.websocket.OnClose;

    import javax.websocket.OnMessage;

    import javax.websocket.OnOpen;

    import javax.websocket.Session;

    import javax.websocket.server.ServerEndpoint;

    //websocket的链接请求的地址

    @ServerEndpoint("/echo") //这一部分和客户端是对应的,特别重要!!!

    public class EchoSocket

    {

    public EchoSocket()

    {

    System.out.println("EchoSocket.EchoSocket()");

    }

    //对onpen给予反应应答,注入一个session对象

    @OnOpen

    public void open(Session session)

    {

    // 一个session惟一表明一个通讯会话

    //经过sessionid区分链接

    System.out.println("sessionid:" + session.getId());

    }

    //关闭管道

    @OnClose

    public void close(Session session)

    {

    System.out.println("session:" + session.getId() + "关闭了。。。。。。");

    }

    //发送消息

    @OnMessage

    public void message(Session session, String msg)

    {

    System.out.println("客户端:" + msg);

    // 服务端对客户的消息给予应答

    try

    {

    session.getBasicRemote().sendText("服务器端:in hao too");

    }

    catch (IOException e)

    {

    e.printStackTrace();

    }

    }

    }

    客户端

    利用JavaScript进行处理,在这一部分一样有一个websocket链接地址的配置,存储到target对象中。

    var ws;//一个ws对象就是一个通讯管道

    //target就是要链接服务端的地址 恰好和服务端的websocket进行匹配和服务器端中表重要部分对应

    var target = "ws://localhost:8888/websocket_01/echo";

    function subOpen(){

    //相似于ajax中兼容浏览器的处理

    if("WebSocket"in window){

    ws = new WebSocket(target);

    }else if("MozWebSocket" in window){

    ws = new MozWebSocket(target);

    }else{

    alert("WebSocket is not supported by this browser.");

    return;

    }

    //获取客户端的消息,传递到服务端

    ws.onmessage=function(event){

    var dv = document.getElementById("dv");

    dv.innerHTML+=event.data;

    };

    }

    //发送消息的事件

    function subSend(){

    var msg = document.getElementById("msg").value;

    ws.send(msg);

    document.getElementById("msg").value = "";

    }

    open

    send

    当程序启动后,观察后台的打印状况,程序中检测到一个websocket类。

    a98328b87f4c48d3b44670f231eaa59a.gif

    进入程序界面,点击【open】,启动调试模式,观察连接调用

    a98328b87f4c48d3b44670f231eaa59a.png

    采用websocket的,URL是ws或者是wss开头,wss表明加密以后的。

    在客户端文本框中输入消息后发送,注意前台的输出和后台的打印状况,其实在通道打开的过程当中,实现了消息的通讯。

    a98328b87f4c48d3b44670f231eaa59a.png

    【总结】

    消息通道的打开和信息传递只是其中很基础的一部份内容,作好基础后,将后开启后续的操做,实现聊天以及群聊之类。同时也渐渐发现随着技术的深刻,感受这个科技中的神秘感愈来愈少。。。。。。

    展开全文
  • and this is where the request returns the error: WebSocket connection to 'wss://[URL]:4433/projects/socket' failed: WebSocket opening handshake was canceled. Binding the socket to 0.0.0.0 results in ...

    I have recently setup an EC2 instance (in a VPC with no load balancer) and admittedly the configuration is a bit odd, but it is what is required for the web application we're running.

    The web server (in Haskell) is running on port 4433 (standard ports are reserved for an Apache instance) and is receiving UDP packets being broadcast from another system. I have many of the ports wide-open (just during testing) as shown here (from Security Groups):

    Custom TCP Rule 4433 tcp 0.0.0.0/0 ✔

    Custom TCP Rule 8080 tcp 0.0.0.0/0 ✔

    SSH 22 tcp 0.0.0.0/0 ✔

    HTTP 80 tcp 0.0.0.0/0 ✔

    HTTPS 443 tcp 0.0.0.0/0 ✔

    Custom UDP Rule 30090 udp 0.0.0.0/0 ✔

    Custom UDP Rule 30089 udp 0.0.0.0/0 ✔

    The JavaScript for the TCP socket makes a request to setup the socket on this same port (using the URL assigned to the AWS's public IP) and this is where the request returns the error:

    WebSocket connection to 'wss://[URL]:4433/projects/socket' failed: WebSocket opening handshake was canceled.

    Binding the socket to 0.0.0.0 results in the same error.

    In order to start the Haskell web server I had to reference the internal IP provided by AWS as it would not run when referencing the public IP provided by the elastic IP service. Thinking this is where the problem came in I changed my socket request to this...

    wss://[internal ip]:4433/projects/socket

    This changes the error:

    WebSocket connection to 'wss://[internal IP]:4433/projects/socket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

    That error makes sense to me as the internal IP is not available to the outside world.

    Everything that I've read on websockets on AWS involves an ELB (Elastic Load Balancer) and I am not in need of one of those. I have tried all of the things in all of the currently posted answers (some of the questions haven't even gotten answers) on SO to no avail. I also setup a support case with Amazon (nearly 24 hours ago) which hasn't received a response.

    Additional Info

    Navigating to http://[URL]:4433/projects/socket yields 'WebSocket Available' where the URL is the one we wish to use as well as the Public DNS provided by AWS.

    Running netstat -plunt reveals the following:

    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -

    tcp 0 0 [internal IP]:8080 0.0.0.0:* LISTEN -

    tcp 0 0 [internal IP]:4433 0.0.0.0:* LISTEN -

    tcp6 0 0 :::22 :::* LISTEN -

    tcp6 0 0 :::443 :::* LISTEN -

    tcp6 0 0 :::80 :::* LISTEN -

    udp 0 0 [internal IP]:30089 0.0.0.0:* -

    udp 0 0 0.0.0.0:30090 0.0.0.0:* -

    udp 0 0 0.0.0.0:11950 0.0.0.0:* -

    udp 0 0 0.0.0.0:68 0.0.0.0:* -

    udp6 0 0 :::38450 :::* -

    Has anyone had a similar problem with websockets on AWS? If so, how did you solve the problem?

    解决方案

    There was an SSL certificate mismatch between the Haskell server and the Apache server.

    The Haskell server had to be rebuilt with information concerning the new certificates for the instance. Further complicating this the proper SSL library (libssl0.9.8 libssl-dev) was not installed on the EC2 instance which was causing me problems during the rebuild of the Haskell server. Knowing an EC2 instance is a "blank canvas" makes the lack of that installation my fault.

    Once I had the libssl installed I was able to rebuild the Haskell server with it pointing to the new certificates. Once the certificates "matched" the websocket issue disappeared.

    Just to reiterate, ours is a unique situation. We have an Apache server (ports 80 and 443) and a Haskell server (ports 8080 and 4433) which communicate with each other, performing a pub-sub operation over websockets. A certificate mismatch between the two servers (it would not have mattered what type, it could have been multiple Apache instances) caused an SSL warning. Any warning from SSL will tear-down any attempt to establish or maintain a websocket (hence the handshake canceled message).

    Another StackOverflow post provided some clues that were of tremendous help during this process. More specifically this warning -

    The key to the problem is this: If your SSL certificate causes a warning of any sort, wss:// WebSocket connections will immediately fail, and there is no canonical way to detect this.

    展开全文
  • 我服务端是IIS 10 用了Owin.WebSocket
  • websocketd开启websocket服务

    千次阅读 2020-09-01 10:41:30
    /bin/bash # Count from 1 to 10 with a sleep for ((COUNT = 1; COUNT ; COUNT++)); do echo $COUNT sleep 0.5 done 启动服务 $ ./websocketd --port=8080 bash ./... script> 参考 阮一峰的网络日志-WebSocket 教程
  • 1.SAP上创建一个WebSocket Server SE80->新建一个abap push Channel(APC) 生成类和服务 导航到类,进行类实施 重定义->ON_START METHOD if_apc_wsp_extension~on_start. *CALL METHOD SUPER->...
  • websocket系列:如何在websocket建立连接时传递参数 主要采用2种方式: 1. 路径参数PathVariable 2. 查询参数RequestParam
  • webSocket配置wss访问

    千次阅读 2021-12-07 16:44:32
    } 这个时候进行websockert连接的话,还是不行的,因为我们需要改一下代码,https只能使用域名访问,后面的wss对应的是nginx设置的/wss,这个时候就可以连接成功了 ws = new WebSocket("wss://www.youadmin.com/wss")...
  • webSocket--2.打开关闭管道

    千次阅读 2018-02-01 21:23:38
    1 基本步骤 1. 开启连接 2. 客户端给服务器端发送数据 3. 服务器端接收数据 4. 服务器端给客户端发送数据 5. 客户端接收数据 6. 监听三类基本事件: onopen, onmessage,... onopen是打开连接时的响应事件。
  • 没事打开小程序,和附近的人剪刀石头布,想来就来,想走就走。谁能成为武林高手?!微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架、组件以及API,在这个平台上面的想象空间很大。腾讯云拿到...
  • Nginx反向代理Websocket

    2021-03-03 21:15:01
    chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek...
  • 通过webRTC+websocket实现视频通话

    千次阅读 2020-10-19 17:16:49
    最近空闲时间较多,于是写了...webRTC、websocket 2.实现思路: 两个浏览器打开同一页面,连接到同一个socket。 此时由一端点击建立连接,发起建立连接的一端就是offer(携带信号源信息),发给另外一个端,另外一个端收
  • 判断websocket状态

    万次阅读 2019-09-29 14:50:01
    只要在函数中添加对状态的判断,在状态为OPEN时,执行send方法...var socket = new WebSocket(“ws://127.0.0.1:8000/ws”); var message = { nickname: “benben_2015”, email: “123456@qq.com”, content: “I...
  • websocket建立连接时传递参数

    千次阅读 2021-02-28 14:54:08
    后台获取参数4中方法:websocket的url"ws:localhost:82/chat/123?username=ydh";socket的注释@ServerEndpoint("/chat/{param}")socket的open方法@OnOpenpublic void open(Session session, @PathParam("param")...
  • 实例运行一个web项目 本地如果没有ubuntu镜像 docker pull ubuntu 一、挂载共享文件并启动容器 docker run -itv /home/QQBOT:/home/qqbot ubuntu /bin/bash 查看所有容器命令:docker ps -a ...
  • 在用户打开多个tab页面时,新的页面中,不建立websocket连接。然后多tab页之间进行消息通讯。这个方案会带来这么几个问题 多tab之间如何通讯 怎么判断打开的是不是第一个需要建立连接的页面 如果关闭了第一个...
  • udp与websocket的示例

    千次阅读 2020-05-05 19:50:50
    最近工作中遇到用udp对接GPS信息报文,以及用websocket展示推送最新的问题,在此记录下。 udp协议和websocket的优缺点和协议的原理,就不再写了,网上有很多文章都写到这两个,这里就直接就其应用代码做下记录。 UDP...
  • 懒得修改了 直接附上满足我需求的代码: java文件 很多方法我没用到 package com.example.demo.websocket; ...import javax.websocket.*; import javax.websocket.server.ServerEndpoint; impor...
  • 直接在后端处理session,因为每次打开页面都需要重新连接,那么我们在后端就处理每次的连接请求,每次有新的连接接入就从新加入,这样在每个页面都能接收到消息啦。 /** * 建立连接后,把登录用户的id * 写入...
  • 当您在同一浏览器中打开同一文档时,该文档上的更改将通过跨表通信(和作为后备)进行交换。 支持交换意识信息(例如,光标)。 快速开始 安装依赖项 npm i y-websocket 启动y-websocket服务器 该存储库实现了一个...
  • 非常简单的websocket离线测试工具哦,方便没有网络时候支持离线使用, 在浏览器打开index.html就可以使用,输入对应的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...
  • 功能包括:-记录往返WebSocket的所有传入和传出消息-打开WebSocket的多个连接-保存通常用于加速开发的有效负载-多个选项卡可让您快速发送不同的有效负载-管理和切换从一个界面在多个项目之间切换-断开时自动重新...
  • websocket离线测试包.zip

    2020-04-22 15:32:17
    简单的websocket离线测试工具,方便离线使用 浏览器打开index.html,输入对应的websocket地址,点击连接,连接成功可以发送消息进行测试
  • JAVA整合WebSocket实现服务器消息推送(项目源码) (1)将Database文件夹中的扩展名为db_netExam_Data.MDF和db_netExam_Log.LDF的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2005中的...
  • Websocket测试工具

    2017-08-15 09:19:27
    用支持Websocket的浏览器打开本网页,可以与Websocket服务器进行通信交互,也可以验证Websocket服务器消息处理是否正确。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,795
精华内容 13,918
关键字:

websocket怎么打开