- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定这个问题是与 Mina 相关还是更多与 Azure 相关,但它与网络有关。我还添加了 Netty
标签,因为 Mina 和 Netty 共享许多网络原理。
我希望得到深入研究的建议。
我在本地网络中使用了某个 Mina 应用程序很长时间,现在我正在尝试将其迁移到云端。我在 Azure 中部署 Linux 虚拟机(每个虚拟机都有公共(public) IP,但这真的很重要吗?)。
他们(使用 Mina)连接到 Azure 之外的一台机器,该机器也有它的自己的公共(public)IP。平常的事情:
SocketConnector connector = new NioSocketConnector(numberOfConnectors);
ConnectFuture connectFuture = connector.connect(new
InetSocketAddress(remoteHost, remotePort));
connectFuture.awaitUninterruptibly(connectTimeout);
Azure 之外的那台 Mina 机器也运行 Mina。我们就这样调用它吧服务器机器。
它接受这样的连接:
NioSocketAcceptor acceptor = new NioSocketAcceptor(acceptor_threads);
org.apache.mina.core.buffer.IoBuffer.setUseDirectBuffer(false);
acceptor.getSessionConfig().setTcpNoDelay(true);
acceptor.setReuseAddress(true);
acceptor.getSessionConfig().setSendBufferSize(buffer_size);
acceptor.getSessionConfig().setMinReadBufferSize(64000);
acceptor.getSessionConfig().setReceiveBufferSize(buffer_size);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, iddle_time);
acceptor.getFilterChain().addLast("codec", new
ProtocolCodecFilter(CodecFactory.getInstance()));
acceptor.setDefaultLocalAddress(new InetSocketAddress(port));
当 Azure 应用程序连接到服务器计算机时,服务器会保存
IoSession session
将来像这样异步推送消息:
session.write(message);
这在本地网络(没有 Azure)中运行良好,但在当前部署服务器发送消息
2017-01-17/15:45:19.823/GMT-00:00 [nioEventLoopGroup-3-3] [...] DEBUG
Sending message to /13.94.143.139:41790
并且 Azure 计算机不会收到任何内容。而且,经过一个而服务器端出现如下异常:
2017-01-17/16:01:11.419/GMT-00:00 [NioProcessor-4] [...] ERROR
Exception in IOHandlerConnection timed out
java.io.IOException: Connection timed out
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:695)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1141)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
2017-01-17/16:01:11.424/GMT-00:00 [NioProcessor-3] [...] DEBUG sessionClosed
我使用 Mina 版本 2.0.4(是的,它很旧,但它现在可以在本地网络上运行好几年了)。
我使用 Java Azure SDK 1.0.0-beta3 设置 Azure 网络
Network.DefinitionStages.WithCreate creatableNetwork = azure.networks()
.define(networkName)
.withRegion(region)
.withExistingResourceGroup(resourceGroup)
.withAddressSpace("10.0.0.0/20");
并创建虚拟机
VirtualMachine.DefinitionStages.WithCreate creatableVirtualMachine =
azure.virtualMachines()
.define(String.format(...))
.withRegion(region)
.withExistingResourceGroup(resourceGroup)
.withNewPrimaryNetwork(creatableNetwork)
.withPrimaryPrivateIpAddressStatic(inetAddress.getHostAddress())
.withNewPrimaryPublicIpAddress(String.format("chr-vm-%04d", i)) .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
.withRootUserName(linuxUserName)
.withPassword(linuxUserPassword)
.withSize(VirtualMachineSizeTypes.STANDARD_D2_V2)
.withNewStorageAccount(creatableStorageAccount);
我想知道什么原因可能会阻止消息从服务器传输到Azure 客户端计算机? Azure 网络配置?米娜配置? (从客户端计算机到服务器计算机的第一条消息确实在连接后发出)
希望以上信息能给我们一些线索。
最佳答案
感谢 Peter Pan - MSFT
注意到 NSG - 网络安全组
,我已经解决了我的问题。
NSG 像 Windows 防火墙一样控制输入/输出规则。您应该创建 NSG,向其添加规则,并将 NSG 分配给特定实体:
至少有两个分配 NSG 的选项:
有教程1和 Java 代码示例 2 。就我而言,为每个虚拟机创建一个单独的网络接口(interface)(因为每个虚拟机都有公共(public) IP)。因此,我将一个 NSG 分配给一个子网。
首先,创建 NSG:
NetworkSecurityGroup NSG = azure.networkSecurityGroups()
.define(networkSecurityGroup)
.withRegion(region)
.withExistingResourceGroup(resourceGroup)
.defineRule("Inbound")
.allowInbound()
.fromAnyAddress()
.fromAnyPort()
.toAnyAddress()
.toAnyPort()
.withAnyProtocol()
.withDescription("Incoming messsages")
.withPriority(100)
.attach()
.create();
然后修改代码以显式定义子网并向其分配 NSG(如果没有显式定义,则自动创建 subnet1
而不使用 NSG)
Network.DefinitionStages.WithCreate creatableNetwork = azure.networks()
.define(networkName)
.withRegion(region)
.withExistingResourceGroup(resourceGroup)
.withAddressSpace("10.0.0.0/20")
.defineSubnet(subnetName)
.withAddressPrefix("10.0.0.0/20")
.withExistingNetworkSecurityGroup(NSG)
.attach();
因此,其余代码与上面问题中发布的相同。
有用的链接:
关于java - Azure 和 Apache Mina,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41713944/
我有一个NioSocketConnector,并且已经成功获得了IoSession。我可以编写测试消息("abcdef"、"|"、"(asdfb)"、"1234567890" 等)我的“真实”消息错误
我正在使用使用 NioAccepter 的 MINA 实现。 我的任务是与其他 java.net.Socket 框架以及 Apache 的 MINA NIO 框架建立一个基本的 java.net.So
我有一个应用程序,由服务器和客户端两部分组成。 它的工作原理如下: 客户端连接服务器并发送字符串;服务器接收字符串并返回一个ArrayList(通过字符串转换),其中包含10000个元素。 我编写了一
我在使用 apache MINA 时遇到了一个奇怪的问题。我有基于 apache Mina 框架的服务器应用程序。我在服务器端使用 ExecutorFilter 。该应用程序在我的计算机上完美运行,但
我目前正在深入研究 Apache MINA。这是一个很棒的框架,具有很多功能。到目前为止最难的部分是解码器部分。检查api文档我了解到有以下类可以扩展和实现自己的类: DemushingProtoco
我在这个链接 http://www.techbrainwave.com/?p=912 上找到了一些代码其中描述了如何使用 apache mina 设置客户端服务器架构。但是,在提供的示例中,它只是单向
我有一个基于 Apache Mina 2.0.4 的应用程序,其中我使用 ExecutorFilter 在 message_received 事件上创建线程。 我发现在生产环境中,在某些时候Execu
我一直在使用 Apache Mina 开发我的第一个基于 TCP/Socket 的应用程序,它看起来很棒而且很容易做。我只想在这里问一个关于 Mina 的问题。 服务器强加 5 秒的空闲时间将终止套接
现在我有一个使用Mina的java应用程序,当socket连接到服务器时,我认为这个java应用程序是正常的,否则是异常的。简而言之,我使用套接字长连接实现应用程序状态监视器。问题是如何使用 Mina
我正在制作一个需要客户端-服务器消息传递的应用程序。我决定使用 MINA。服务器工作得很好(读取消息、触发事件并写入响应,如日志中所示),但客户端似乎没有触发任何事件。它记录发送的消息、接收的字节,但
我基于apache mina 2.0.4构建了一个tcp服务器,并且在写回客户端时遇到了一些问题。 我们有一些 tcp 客户端一次只能处理一条消息,缓冲区大小最大为 256 字节。当我向客户端发送 2
我的 MINA 客户端有一个小问题。 我只创建一个到服务器的连接,然后服务器每秒定期发送某种数据。 简而言之,客户端连接到服务器;服务器向客户端发送回一个字符串,并且所有这些步骤都使用相同的打开的连接
我正在使用 mina gem 进行部署。我必须通过网关才能连接到我的服务器。我知道 capistrano 启用它。 有谁知道mina中的这个配置吗? 最佳答案 我不认为 mina 支持这个;当然,th
我有一个使用 MINA 版本 2 的服务器设置。我对套接字和 tcp 没有太多经验。 问题是如果我连接到我的服务器,然后拔下我的互联网并关闭连接,(服务器没有收到连接关闭的通知)服务器将永远认为我的连
第一次使用 Ruby on Rails 应用程序尝试 Mina,但在以 root 用户身份部署时,它似乎没有看到 Bundler。 我正在使用 Digital Ocean 作为远程服务器。 如果我以相
我正在尝试关注 Apache MINA 的 guide用于设置 SSHD 服务器,但在使用 PuTTY 连接到它时遇到问题。我开始输入用户名,但随后收到以下错误消息: 下面是我的服务器的代码。我是否必
我正在使用 mina 部署部署 Rails 4 应用程序。我的部署脚本是 require 'mina/bundler' require 'mina/rails' require 'mina/git'
有没有办法通过 Mina 部署 repo 的子目录?我见过人们使用自定义部署策略通过 Capistrano 实现这一目标,我希望能够通过 Mina 实现这一目标。 最佳答案 请查看此存储库,https
我有一个 mina 客户端,它的连接器是 NioSocketConnector。我已经用真实服务器编写了这个客户端的集成测试。但是,我找不到方法做 单元测试 .例如,我想在不打开真正的套接字的情况下测
我正在使用 Apache Mina 构建我自己的 SFTP 服务器。我想在每次文件传输完成后自动通知服务器。请在这个方向上帮助我一些指示。 理想情况下,应该有一个我需要实现的接口(interface)
我是一名优秀的程序员,十分优秀!