browser - 带有阻塞 IO 客户端、浏览器的 Netty

标签 browser io blocking netty

我有一个使用传统 BIO(阻塞 IO)的遗留应用程序(HTTP 和原始 TCP),我想开始用 Netty 替换它。

Netty 如何与传统的 BIO 客户端一起工作?如果我先用 Netty 替换服务器组件并保留 BIO 客户端,会有什么问题吗?

此外,Netty 构建的服务器是否可以替代旨在为浏览器客户端提供服务的典型 HTTP Web 服务器?有什么问题吗?

谢谢

最佳答案

我的理解是netty支持阻塞(org.jboss.netty.channel.socket.oio)和非阻塞(org.jboss.netty.channel.socket.nio) 操作。参见 http://docs.jboss.org/netty/3.2/guide/html/architecture.html第 2.2 节。

在阻塞和非阻塞之间切换很容易,所以你可以尝试使用 NIO,如果你的客户端不行,你可以切换到 OIO。您将您希望支持的 IO 类型设置为 ChannelFactory

// NIO - non blocking
ChannelFactory factory =
        new NioSeverSocketChannelFactory(
                Executors.newCachedThreadPool(),
                Executors.newCachedThreadPool());

//OIO - blocking
ChannelFactory factory =
        new OioServerSocketChannelFactory(
                Executors.newCachedThreadPool(),
                Executors.newCachedThreadPool());

已经实现了许多现有的基于 netty 的 HTTP 网络服务器/框架。例如,webbit , xitrumplay framework .我敢肯定还有更多。这些只是我能想到的。

如果你想自己实现,一个很好的起点是 org.jboss.netty.example.http 包中的示例。

关于browser - 带有阻塞 IO 客户端、浏览器的 Netty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467709/

相关文章:

html - 为什么向 bootstrap 元素添加自定义类在 chrome 中不起作用,但在 edge 中却有效?

haskell - 如何避免整个程序在 IO monad 中操作?

java - 如何将文件中的字符写入二维数组?

io - 打印输入+IO功能输出

iphone - 为什么ASINetworkQueue和ASIHTTPRequest阻塞了主线程?

java - 如何中断BlockingQueue?

java - 有效阻塞查询的建议

css - 在浏览器视口(viewport)外显示元素

javascript - 跟踪 JavaScript 对 Ctrl + F 的使用?

firefox - 从终端窗口启动 firefox,打开一个文本文件并将显示的文本定位在指定行