Comments (7)
其实整体思路和单点登陆是一样的。
至于session的话,在所有的事件中都会带有该连接的唯一session,调用session的sendText()方法即可对客户端发信息。
如果需要把session与业务中的用户对应上,一般做法是把用户唯一标识放在cookie中,而我们只需要在@onopen注解的方法中,通过HttpHeaders即可获得即可。
from netty-websocket-spring-boot-starter.
@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.
在websocket服务端在确定数量的时候,这是个相对优雅的解决方案.
但遇到websocket服务器需要扩容时,这时候原本的连接可能hash之后就不是同一个服务器,就会出现你说的客户端需要重连一次.
那么,可以回到我们单点登陆时,利用redis存储用户标识的方式.
如:每一个客户端连接时都会有一个唯一标识,那么这时可在redis中存 uid : serverid(websocket服务器的唯一标识).这时当需要对某个客户端(或者或某个uid)进行推送时,就可以在redis中获取到相应的服务器信息 (当然,里面还要保证服务器中信息与redis中信息一致性问题没说)
from netty-websocket-spring-boot-starter.
ok 明白了 谢谢大佬:blush:
from netty-websocket-spring-boot-starter.
在websocket服务端在确定数量的时候,这是个相对优雅的解决方案.
但遇到websocket服务器需要扩容时,这时候原本的连接可能hash之后就不是同一个服务器,就会出现你说的客户端需要重连一次.
那么,可以回到我们单点登陆时,利用redis存储用户标识的方式.
如:每一个客户端连接时都会有一个唯一标识,那么这时可在redis中存 uid : serverid(websocket服务器的唯一标识).这时当需要对某个客户端(或者或某个uid)进行推送时,就可以在redis中获取到相应的服务器信息 (当然,里面还要保证服务器中信息与redis中信息一致性问题没说)
如何通过serverid向客户端发送消息呢
from netty-websocket-spring-boot-starter.
我打算通过 MQ广播所有 WebSocket 节点,判断用户在不在自己这儿,如果不在就丢弃,有啥弊端吗?
from netty-websocket-spring-boot-starter.
我打算通过 MQ广播所有 WebSocket 节点,判断用户在不在自己这儿,如果不在就丢弃,有啥弊端吗?
节点数不多,用户量不大的情况下没什么问题。
因为每次广播都等于所有节点在处理,假设每个用户都这样处理一下,这个处理量是他们的乘积。节点多,用户多的情况下就会比较浪费
from netty-websocket-spring-boot-starter.
Related Issues (20)
- BeforeHandshake关闭session后,nginx转发http响应的502 HOT 2
- 想问下服务器如何判断客户端掉线,然后通知他的好友 HOT 2
- writerIdleTimeSeconds配置使用${引用nacos配置},不能做到动态刷新 HOT 1
- 整合RocketMq后异常日志不全 HOT 2
- netty默认的Channel的通道id太长了,目前框架上支持这个id自定义吗? HOT 1
- 客户端断网后服务端不知道客户端断开了 HOT 1
- 请问如何处理数据库存储的客户端连接状态,假如单节点部署,重启过程中客户端离线,数据库的状态如何改变呢,有什么策略可以主动ping客户端吗 HOT 1
- 想问一下0.12版本客户端访问问题 HOT 1
- 使用@ServerEndpoint修饰但不用@Component时,其它Bean注入该Bean时会报 bean could not be found 异常 HOT 2
- 客户端在线,服务端离线 HOT 1
- 是否支持socketjs+stomp? HOT 1
- 连接报错,发送消息也报错。。。看内容吧。。。 HOT 3
- 能否支持自定义全局异常处理? HOT 1
- 能否进一步优化反射方法性能 HOT 1
- 0.12.0使用的netty版本和文档不一致 HOT 2
- 支持TCP吗?
- pojoClazz 不是单例的吗
- 不支持jdk17么?
- 支持SpringBoot3.2吗 HOT 2
- 如何控制@onClose的关闭时间
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from netty-websocket-spring-boot-starter.