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



我正在为一个在线游戏实现一个websocket安全(wss://)服务,在这个服务中,所有用户都将连接到该服务,只要他们在玩游戏,这将使用大量的同时连接,尽管流量不会是大问题,因为该服务用于聊天、存储和通知。。。而不是用于实时数据同步。

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

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

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

我也会为客户端使用c#,所以我既不需要hybiXX兼容性,也不需要回退,我只需要可扩展性和TLS支持。

我最终为WebSocketListener添加了Mono支持。

请查看如何在Mono中运行WebSocketListener。

10公里连接不是一件小事。WebSocketListener是异步的,并且可以很好地扩展。我已经做了10公里连接的测试,应该没问题。

我的测试表明,WebSocketListener的速度和可扩展性几乎与微软的一样快,并且比Fleck、Alchemy和其他公司表现更好。

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

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

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

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

另一方面,我测试了node.js,管理大量连接似乎更简单,因为节点在达到tcp限制时不会崩溃。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新