有一个现有的服务,我想为其编写一个虚拟服务(使用 Netty)。它将用于测试目的。
该服务的现有客户端代码片段如下所示:
Socket socket = new java.net.Socket();
socket.connect(new InetSocketAddress("localhost", 8080), 10000);
socket.setSoTimeout(20000); // set a timeout of 20 seconds
InputStreamReader ir = new InputStreamReader(socket.getInputStream());
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// write some string to the server and wait for answer
out.println("SomeCommand");
// server has written some answer, read it
char[] c = new char[2];
ir.read(c, 0, 2);
String cs = new String(c);
if ("OK".equals(cs.toString())) {
// write some more string's to the server
}
// we're done, close the connection
out.println("BYE");
out.close();
socket.close();
Netty是为 java.net.Socket 连接创建服务器的正确框架吗?(如果没有,应该使用哪个框架,如果有的话?)
我正在尝试使用 QuoteOfTheMoment 示例找到一种从 Netty 开始的方法。QuoteOfTheMomentServerHandler 基本上做了我想要的,在传入消息时,返回一些答案,以便上面的代码片段可以使用输入流读取答案,但上面的套接字无法连接到 QuoteOfTheMomentServer。错误是“连接被拒绝”。
[编辑]更多说明:
问题(我认为)没有连接或我使用的端口。让我试着更好地问这个问题:
我刚开始使用netty(没有nio经验)并且不熟悉不同类型的渠道、管道等等。
服务器应该像servlet 请求/响应(例如,不是 http 或尝试重建 http servlet impl),对写入输出流的 inputString 做出反应,如代码片段中一样,并将一些字符串/字节写回输入-stream 在代码片段中,所以客户端才继续。所以连接应该保持打开但也是同步的,客户端等待来自服务器的应答。如果我在 java 教程中使用示例“编写套接字的服务器端”,我可以让它为客户端工作。但我想利用netty的线程处理等。
QuoteOfTheMomentServerHandler 似乎是我想要的服务器端实现,但是该设置可以处理给定的客户端代码吗?
所以问题是考虑到客户端的工作方式,应该使用哪种管道、通道或类似的东西?
同样,客户端和服务器是存在的。我想构建一个虚拟服务器实现以与现有客户端一起使用。