使用Fleck Websocket进行10k同步连接

时间:2014-04-21 11:39:09

标签: linux c#-4.0 mono websocket

我为在线游戏实施websocket-secure(wss://)服务,只要他们玩游戏,所有用户都将连接到服务,这将使用大量的同时连接虽然流量不是一个大问题,因为该服务用于聊天,存储和通知......不适用于实时数据同步。

我想使用Alchemy-Websockets,但它不支持TLS(wss://),所以我必须寻找像Fleck(或其他)这样的其他服务。

Alchemy已经过大量同时连接的测试,但我没有找到类似的Fleck测试,所以我需要从fleck的用户那里获得一些真实的信息。

我知道Fleck是非阻塞的并且使用异步调用,但是我需要一些真实的信息,因为它可能会滥用线程,垃圾收集器或任何其他方面,这些方面对于较少数量的连接是不可见的

我也会将c#用于客户端,因此我既不需要hybiXX兼容性,也不需要后备,我只需要可扩展性和TLS支持。

3 个答案:

答案 0 :(得分:2)

我最终将Mono支持添加到WebSocketListener

点击how to run WebSocketListener in Mono

10K连接不是小事。 WebSocketListener是异步的,它可以很好地扩展。我已经完成了10K连接的测试,应该没问题。

我的测试表明,WebSocketListener几乎和微软一样快,可扩展,并且性能优于Fleck,Alchemy等。

答案 1 :(得分:1)

我在装有Core2Duo e8400处理器和4 GB内存的Windows机器上进行了测试。

结果并不令人鼓舞,因为它在达到~1000个连接后开始延迟握手,即接受新连接需要大约一分钟。

当我使用XSockets时,这些结果得到了改进,因为在同样的事情发生之前它已达到8000个并发连接。

我尝试使用Mono在Linux VPS上进行测试,但我没有足够的Linux管理经验,并且需要更改与TCP等相关的一些系统设置以便允许大量并发连接,所以我只能在默认设置下达到~1000,之后他的应用程序崩溃了(包括Fleck测试和XSocket测试)。

另一方面,我测试了node.js,管理非常多的连接似乎更简单,因为节点在达到tcp的限制时没有崩溃。

所有测试,其中echo测试,服务器将相同的消息发送回发送消息的客户端和一个随机的其他连接客户端,并且每个连接的客户端随机间隔向服务器发送随机的~30个字符文本消息在0到30秒之间。

我知道我的测试不够通用,我鼓励任何人都有自己的测试,但我只想分享我的经验。

答案 2 :(得分:0)

当我们决定尝试Fleck时,我们为Fleck服务器实现了一个包装器,并实现了一个JavaScript客户端API,以便我们可以将确认消息发送回服务器。我们想测试服务器的性能 - 消息传递时间,丢失消息的百分比等。结果对我们来说非常令人印象深刻,目前我们在生产环境中使用Fleck。

我们在高峰时段有4000 - 5000个并发连接。平均每秒发送40条消息。已确认的消息比率(已确认消息/已发送消息总数)从未降至0.994以下。消息的平均往返时间约为150毫秒(服务器发送消息和接收消息之间的持续时间)。最后,由于Fleck服务器使用频繁,我们没有任何与内存相关的问题。

相关问题