服务器1这层做负载集群.简单做法是:连接都在服务器1上.如果1的已连接数超过配置值.则返回一个新地址1.1让客户端连.所有的服务器1都是这个逻辑.服务器1这层就没问题了.
而你的服务器2是接口消息的.可以用消息总线来处理.服务器将消息发送到消息总线.服务器2订阅这个消息.这是服务器2可以直接集群.反正都订阅那个消息队列就是
可以这样么,就是 服务器1在这里充当两个身份,在下层实际上就是一个服务器 负责连接所有的客户端并保存每个客户端的Socket对象。第二个身份是面对服务器2,服务器1是服务器2的客户端,服务器1要登录服务器2。我的想法是,服务器1接收到任意客户端发送的消息时,就直接通过 服务器1链接服务器2的Socket对象将收到的信息发送至服务器二,我只是担心这种方式 会拥堵 而且并发访问时造成丢包 我C#都是自学的 很多架构都不是太懂 你说的消息订阅什么的有没有一些简单的例子能够参考?消息总线的话 如果完成这个需求困难不?自学的话大概需要多久呢?
@无线电静默: 没什么难度.具体操作查百度.看你这说法.是客户端推数据到服务器1的?不需要服务器推数据到客户端?
@吴瑞祥: 服务器1实际上就是起到转发作用 不同客户端将数据都发送到服务器1,服务器1将这些数据转发至服务器2, 服务器2也会发送信息 通过服务器1 群发或者选择性发送至客户端 这种需求 我之前说的那种架构行么?
@无线电静默: 你的客户端是在PC端的一个exe程序吗?架构肯定是可以的.最多就是在服务器1这一层加个调度服务器.
@吴瑞祥: 我Socket 通信时发生一个莫名其妙的问题 我发送方将数据放松到接收方时,使用的都是UTF8编码,给的buffer空间也绝对够用 但是接收方接收到byte数组时 第一位始终为“0”造成转成字符串时 变成“\0······” 之前我也遇到过 接收到的byte数组第一位是“30” 转成的字符串也不正常 我把发送和接收的代码看了几遍 没错啊
@吴瑞祥: 以前做另一个Socket通信的时候也遇到过 就是 接收方的byte数组里面 第一位是30 造成转变成也有一个看不见的字符 一直没找原因 请问你们做得时候遇见过没有?》
说了都是简单的服务器,却来研究应对高并发的方案,有意思吗?
你已经找到怎么模拟足够客户端的方法了吗?
在知识贮备不够的时候,不要想着搞些高大上的玩意。
搞些实际点的,别浪费时间。
其实我也真的想简简单单就完成这些事情,但是今天测试,就五个客户端,每个客户端都简单的每隔500毫秒发送一次数据,服务器接收到转发后,socket粘包了。网上查一会儿是用队列,可惜我不会,一会儿又是写什么分包算法什么的,我也就想简单实现我要的功能而已,但是就是出现这个问题了啊。粘包这个问题我还能理解,毕竟服务器缓冲区收到的数据多了来不及处理。但是日了狗的是明明发的就是一个字符串,收到后前面莫名奇妙多了个字符,这个字符看不见,但确实存在不知道哪里来的,发送端发送的都没有,接收到时就出现了。虽然这个问题好解决,我截取后面的字符串第一个字符不要就是了,但是就是好奇多那个字符到底哪里来的
@无线电静默: 只能说长路漫漫,socket编程是很难的,大概率微软下的开发者都是用asp.net,或是wcf做服务和通信。若是你仅仅是要完成功能,直接用wcf吧,毕竟例子抄抄就好。
若想用好socket,有时间肯花时间和精力,肯定会成功,就看你自己怎么决定了。