引用:Gangan_Master 发表于 2022-06-01 17:18 专业 |
或许思考下面这几个问题大家就知道Nginx能不能作为IM的负载均衡了: 1.谁负责跟client三次握手四次挥手,是Nginx还是后面的RS 2.客户端的IP和端口在谁那里维护,怎么找到对应用户的连接信息 3.客户端新建连接的时候,Nginx与后面的RS是不是也会新建一条连接 |
引用:JackJiang 发表于 2019-06-10 11:18 我理解的C2C,是指有3步C2S ,S2S,S2C,关键,第2步,S2S,是指不通的C端可能分别被Nginx分配到不同的S服务端上去了 |
如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。这个用户是从哪来的,我怎么感觉目标角色是鞋呢![]() |
引用:ronaldo9107 发表于 2020-11-13 21:15 问题太多了,回答完要累死了 |
引用:yaohuan 发表于 2020-04-16 14:26 怎么没人回复 ![]() |
引用:JackJiang 发表于 2020-04-16 10:14 ![]() |
引用:yaohuan 发表于 2020-04-16 09:54 你理解的很到位。 说白了,Nginx是为web而生,对于im这种业务来说,如果用nginx,也最多只能作为IM集群里的前置LBS而已,起到的作用,跟它在Web中的地位相差太多。所以,正因为是这样,所以IM集群中多数时候LBS也会自已来写而很少考虑Nginx,因为与期鸡肋地用着Nginx,不如自已简单的写一个,还能深度匹配自已的业务,技术更可控,难度也并不大。必竟,im的集群技术难度并不在前置LBS这点事情上。 |
我理解的反向代理,应该只是进行流量负载均衡,不包括路由寻址。C2S是因为C知道S的IP(由公网Nginx转发到后端内网服务器的IP),建立了TCP长连接,该连接可以双向通信,这就让S能够找到该连接的C,因此能够进行S2C。S2C通常在C2S的前提下才能进行,因为C通常都在私网,S是不能首先得知其地点的。而C2C,我们通常认为C是在私网中,外网是不能够直达C的,两个不同网络的C2C通信只能通过S进行中转,同局域网网段的C2C可以进行P2P通信,大多数情况下要解决的是不同网络中的C2C通讯问题,所以大多数情况下是由业务层进行路由寻址的,Nginx不负责具体业务。我觉得只要Nginx能够支持TCP,应该就能进行IM负载均衡。不知道理解是否正确? |
这个观点有问题,nginx负载到各个实例作为的是接入层,已经实现了socket长连接的负载,至于c2c就是上游业务的事情,服务端记录了某个用户登录到某个节点上,转发的时候只要rpc调用到msg发给目标节点接入层就ok了 |
引用:ym_im 发表于 2019-09-06 11:09 你有这个定制开发能力的话,那倒是可以 |
直接搭肯定是不行的。我在考虑开发nginx moudle,这个moudle能多个长连接连接其他服务器,然后nginx接收的客户端msg都通过这个连接转发大logic服务器,然后logic服务器也能转发消息到nginx,就实现了c2c,相当于接入网关 |
引用:fsliangzp 发表于 2019-06-25 14:07 im集群就是这么麻烦,大厂会更复杂。不然,几百上千亿的市值,随便找找开源软件配置配置就能成,那赚钱就太容易了 |
所以题主提到的c2c这种场景下,也能研发自己维护了。 需要保存关联关系,客户端A链接服务端A、客户端B链接服务端B。 客户端A往客户端B发送信息的时候,服务端A就要去中间接找客户端B的服务端B机器出来。然后再广播事件通知服务端B,需要转发消息到客户端B 听着就觉得IM这块在实现方面挺有重量的...不知道大厂的解决方案是怎么样的,这样解决靠谱不。哈哈 |
引用:摸鱼中 发表于 2019-06-10 11:06 c2c不是p2p。 c2c依然是走服务器中转 但如果要做多实例负载,当两个人登陆在不同的实例上时,两个服务端实例间怎么通信? 这是nginx解决不了,也不应该去解决的. 这说的是横向通信能力了。 im难搞就在这里 |
引用:Client to Client方向(简称c2c):即客户端向客户端发送数据的能力,比如:一条正常的好友聊天消息就是由客户端A发送给客户端B(当然这不一定是P2P技术实现)。 c2c 需要服务端吗 |