Netty 和 Channels 和 Websockets

Posted

技术标签:

【中文标题】Netty 和 Channels 和 Websockets【英文标题】:Netty and Channels and Websockets 【发布时间】:2013-06-01 14:54:18 【问题描述】:

所以,我构建了一个基于 Netty 3.6.2 的 Websockets 服务器应用程序。这个应用程序将有很多很多用户。

这个想法是客户端注册以侦听有关某个主题的信息,当信息流过服务器时,服务器将信息发送给客户端。到目前为止听起来很简单,对吧?

我通过在内存中构建一个巨大的地图来实现这一点,将主题映射到客户的频道。当服务器想向所有感兴趣的客户端发送关于某个主题的消息时,它会遍历映射到该主题的所有通道。看起来很简单,对吧?

但是,在一些初步的多用户测试中,我发现自己意识到渠道和客户端之间没有一对一的映射。如果不通过渠道,我如何专门针对向特定客户端发送消息?我很茫然……

【问题讨论】:

为什么channel和client之间没有一对一的映射关系?是不是因为一个客户可能有多个开放渠道? 我认为应该有一个1-1的映射。但是没有。当我查看开放频道的数量时,我有 7 个开放频道,但有 1000 个用户连接。这对我来说毫无意义。但是,我可以看到总共打开了 1000 个频道。只是目前仅打开了 7 个。 等等,如果只有 7 个通道,实际上只有 7 个物理连接,那么如何计算 1000 个用户? 显然发生了一些愚蠢的事情。我可以在 linux 机器上使用我的 netstat -ta 看到多达 89 个打开的套接字,以及 101 个打开的通道。我的客户认为它有 200 多个用户同时连接。我的结论是这不是一个网络问题,这是一个其他问题。 我忘记了 netstat -ta 是什么意思,但我通常会得到我的 java 进程的 pid 并执行 netstat -ap --numeric-ports | grep 【参考方案1】:

客户与开放渠道的比例应该是一对一的。事实上,没有某种与netty无关的问题。

感谢您的帮助。

【讨论】:

以上是关于Netty 和 Channels 和 Websockets的主要内容,如果未能解决你的问题,请参考以下文章

netty : websocketx.WebSocketHandshakeException: not a WebSocket handshake request: missing upgrade(代

NioEventLoop的创建

java NIO

Goroutines和Channels

NIOSocket Server Client

django 频道 channels.exceptions.Channels Full