-
Notifications
You must be signed in to change notification settings - Fork 23
TODO
hocgin edited this page Jan 8, 2022
·
11 revisions
- 广播:
/topic/*
or/queue/*
- 点对点:
/user/*
.
export default () => {
let ref = useRef();
let sendMessage = () => {
// @ts-ignore
ref?.sendMessage('/app/index', `Hello, ${new Date()}`);
};
let sendAllMessage = () => {
// @ts-ignore
ref?.sendMessage('/app/all', `Hello, ${new Date()}`);
};
return (<Page>
<SockJsClient url={'http://127.0.0.1:8080/ws?ticket=1111'}
topics={['/queue/all', '/user/queue/errors']}
debug={true}
onConnectFailure={console.error}
onMessage={console.log}
ref={(c: any) => ref = c} />
<Button onClick={sendMessage}>发送</Button>
<Button onClick={sendAllMessage}>发送 ALL</Button>
</Page>);
};
server server server
| | |
(3) (3) (3)
v v v
secondary <-(1)-> main <-(1)-> secondary
| | |
(2) (2) (2)
v v v
driver driver driver
- driver: 是用户端设备
- server: 是 web 端。
- node-driver 路由表: 维护 node 上的 driver 列表。默认由 cache 实现维护。
- global-driver 路由表: 维护 driver 对应所在 node 的映射。考虑由 redis 或 cache 来实现,设备上/下线 node 之间互相同步维护。
- node-node 拓扑结构: node 之间互相注册。
- node 池: node 维护,各个 node 注册列表。
- driver 池: node 节点维护 driver 注册列表。
- main 选举: 当 main 不存在,
(1) node 数据上报
增量上报: node 主动上报,driver 上/下线时上报到 main。
全量上报: main 发起上报命令,node 上报全部 driver。
main 查询: main 向 node 发起查询命令,node 上报指定 driver。
node 查询: node 向 main 发起查询命令,node 上报指定 driver。
(1) node-node udp 互联
心跳: 当前 node 向 node 列表发起心跳检查,node 返回 ack。ack 延迟按照 12 level 进行降级。
选举:
(2) ws协议: node 与 driver 使用 ws 协议连接。
- ⬇️ 指令 ⬆️ ack
- ⬇️ 切换 node ⬆️ ack
- ⬆️ 心跳 ⬆️ ack
- ⬆️ 登陆 ⬇️ ack
(3) ws协议: node 与 server 使用 ws 协议连接。
存疑部分?
- node-node 结构: 采用星型或者拓扑。 拓扑 + 星型
- 选举算法: main 选举算法