- 请问whatsapp user 第一次连接时的authentication 是怎么做的?面试被问到。我的回答是a)user send HTTP POST 请求个websocket server, websocket server随机生成一个token,返回给用户,之后用户每次请求都带着这个token。不知道对不对?
- User 怎么知道要连接哪一台 websocket server?是在http authenticate的时候websocket server 会告诉user吗?这个信息(userid->websocket_server_id) 需要存在in-memory DB (memcachd) 吗?
- 应该是专门的 Auth server 来处理。在第一次 Auth 完成之后会给一个 token/cookie 来方便下一次 Auth。这个过程完毕之后,可以进一步建立 websocket connection,这时候才涉及到 websocket server 的分配。
- User 第一次请求 websocket server 的时候可以随机分配,并把 mapping 记录在中心化的 cache 或者 db 里。完成双向连接后, 用户会知道与之相连的 websocket server 的 IP 等信息,可以互相发送 heartbeat 保持连接。
这个 token/cookie 需要存在in-memory db (比如memcached)吗?之后每次用户请求server都需要拿来验证?
必须要存数据库,可以选择同时存在缓存。每一次用户 request 都会验证。