Git Product home page Git Product logo

Comments (7)

YeautyYE avatar YeautyYE commented on May 21, 2024

其实整体思路和单点登陆是一样的。
至于session的话,在所有的事件中都会带有该连接的唯一session,调用session的sendText()方法即可对客户端发信息。
如果需要把session与业务中的用户对应上,一般做法是把用户唯一标识放在cookie中,而我们只需要在@onopen注解的方法中,通过HttpHeaders即可获得即可。

from netty-websocket-spring-boot-starter.

SuperChrisliu avatar SuperChrisliu commented on May 21, 2024

@YeautyYE 大佬,你说的参考单点登录是集群模式下socket连接时的认证?我的业务场景是这样的:websocket服务是集群,然后连接的客户端会散列在集群服务器中等待消息推送,服务端的的一个server A负责将消息推送到websocket集群,再由websocket集群里的某个server写到客户端,问题在于server A 怎么知道应该把消息推送给websocket集群中哪台server呢,因为不知道应该接收这条消息的客户端连接到了websocket集群中哪个server。我查到了有一篇文章使用一致性hash算法解决这个问题,即通过hash运算在客户端连接的时候就确定了具体连接哪台websocket server,同时服务端的server A也知道应该把消息推送到哪台websocket server,我觉得这样实现相对优雅,唯一不足就是客户端要重连一次。不知道在实际生产中一般是如何解决这样的问题的呢,大佬有时间的话指点一下:blush:

from netty-websocket-spring-boot-starter.

YeautyYE avatar YeautyYE commented on May 21, 2024

在websocket服务端在确定数量的时候,这是个相对优雅的解决方案.
但遇到websocket服务器需要扩容时,这时候原本的连接可能hash之后就不是同一个服务器,就会出现你说的客户端需要重连一次.
那么,可以回到我们单点登陆时,利用redis存储用户标识的方式.
如:每一个客户端连接时都会有一个唯一标识,那么这时可在redis中存 uid : serverid(websocket服务器的唯一标识).这时当需要对某个客户端(或者或某个uid)进行推送时,就可以在redis中获取到相应的服务器信息 (当然,里面还要保证服务器中信息与redis中信息一致性问题没说)

from netty-websocket-spring-boot-starter.

SuperChrisliu avatar SuperChrisliu commented on May 21, 2024

ok 明白了 谢谢大佬:blush:

from netty-websocket-spring-boot-starter.

tjthink avatar tjthink commented on May 21, 2024

在websocket服务端在确定数量的时候,这是个相对优雅的解决方案.
但遇到websocket服务器需要扩容时,这时候原本的连接可能hash之后就不是同一个服务器,就会出现你说的客户端需要重连一次.
那么,可以回到我们单点登陆时,利用redis存储用户标识的方式.
如:每一个客户端连接时都会有一个唯一标识,那么这时可在redis中存 uid : serverid(websocket服务器的唯一标识).这时当需要对某个客户端(或者或某个uid)进行推送时,就可以在redis中获取到相应的服务器信息 (当然,里面还要保证服务器中信息与redis中信息一致性问题没说)

如何通过serverid向客户端发送消息呢

from netty-websocket-spring-boot-starter.

no-today avatar no-today commented on May 21, 2024

我打算通过 MQ广播所有 WebSocket 节点,判断用户在不在自己这儿,如果不在就丢弃,有啥弊端吗?

from netty-websocket-spring-boot-starter.

YeautyYE avatar YeautyYE commented on May 21, 2024

我打算通过 MQ广播所有 WebSocket 节点,判断用户在不在自己这儿,如果不在就丢弃,有啥弊端吗?

节点数不多,用户量不大的情况下没什么问题。
因为每次广播都等于所有节点在处理,假设每个用户都这样处理一下,这个处理量是他们的乘积。节点多,用户多的情况下就会比较浪费

from netty-websocket-spring-boot-starter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.