当使用此代码发送soap xml时,我希望通过TCP传输向代理服务发送请求
Socket clientSocket = new Socket("host", port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("soap xml instance");
clientSocket.close();
它工作得很好,我的生意还在继续。
但是当我发送两个xml而不关闭套接字时,如下所示:
Socket clientSocket = new Socket("host", port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("soap xml instance");
outToServer.writeBytes("another soap instance");
clientSocket.close();
我能够使用示例客户机向ESB发送TCP消息,但您必须确保发送的是XML元素。
首先,确保您已经在Axis2.xml中启用了tcp传输累西弗(repository/conf/Axis2/Axis2.xml)
<transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportListener" >
===========================================================
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="TCPProxy"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<log level="full"/>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<parameter name="transport.tcp.port">6789</parameter>
<parameter name="transport.tcp.contentType">application/xml</parameter>
<description/>
</proxy>
import java.io.*;
import java.net.*;
class TCPClient {
String host = "localhost";
int port = 6789;
Socket socket = null;
public static void main(String args[]) throws Exception{
String name ="Amani";
TCPClient client = new TCPClient();
String message = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
"<soapenv:Header/>\n" +
"<soapenv:Body>\n" +
" <p:greet xmlns:p=\"http://greet.service.amani.org\">\n" +
" <in>" + name + "</in>\n" +
" </p:greet>\n" +
"</soapenv:Body>\n" +
"</soapenv:Envelope>";
client.SendToServer("<test></test>");
client.close();
}
TCPClient(String _host, int _port) throws Exception{
host = _host;
port = _port;
socket = new Socket(host, port);
}
TCPClient() throws Exception{
socket = new Socket(host, port);
}
void SendToServer(String msg) throws Exception{
//create output stream attached to socket
PrintWriter outToServer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
//send msg to server
outToServer.print(msg + '\n');
outToServer.flush();
}
String RecieveFromServer() throws Exception{
//create input stream attached to socket
BufferedReader inFromServer = new BufferedReader(new InputStreamReader (socket.getInputStream()));
//read line from server
String res = inFromServer.readLine(); // if connection closes on server end, this throws java.net.SocketException
return res;
}
void close() throws IOException{
socket.close();
}
}
TCP代理配置概述。 filter.network.TcpProxy filter.network.TcpProxy.DeprecatedV1 filter.network.TcpProxy.DeprecatedV1.TCPRoute filter.network.TcpProxy filter.network.TcpProxy proto { "stat_prefix": "...",
TCP代理配置参考 { "name": "tcp_proxy", "config": { "stat_prefix": "...", "route_config": "{...}", "access_log": [] } } route_config (required, object) 过滤器的路由表。所有的过滤器实例都必须有一个路由表,即使它是空的。 st
TCP代理架构概述 v1 API 参考 v2 API 参考 统计 TCP代理过滤器同时包括下游统计信息以及适用与多集群上游统计信息。下游统计信息的根为tcp.<stat_prefix>.统计如下: 名称 类型 描述 downstream_cx_total Counter 过滤器处理的连接总数 downstream_cx_no_route Counter 没有找到匹配路由的连接数 downstrea
由于Envoy基本上是作为L3/L4服务器编写的,因此很容易实现基本的L3/L4代理。TCP代理过滤器在下游客户端和上游群集之间执行基本的1:1网络连接代理。它本身可以用作替代通道,或与其他过滤器(如MongoDB过滤器或速率限制过滤器)结合使用。 TCP代理过滤器将遵守每个上游集群的全局资源管理器施加的连接限制。TCP代理过滤器检查上游集群的资源管理器是否可以创建连接,而不会超过该集群的最大连接
我有个奇怪的问题。 我有http流量进入端口80,由我的vhosts文件管理,代理到内部web服务器,但我也有tcp非http流量进入端口80,需要代理到端口80上的另一个内部服务器。 我已经尝试了mod重写规则来尝试隔离非http通信的源ip地址,并创建一个规则来代理它到我的其他内部主机,但这也不起作用。 我将windows与apache一起使用,如果可能的话,我更愿意使用apache来实现这一
以下是我对这些的理解,我看到了很少的差距;特别是何时何地使用 HTTP(s)代理: 可用作TLS终止代理 可用于修改HTTP标头 可用作DMZ前面的负载均衡器或公共IP提供程序,以屏蔽后端服务器 TCP代理 可以用作TCP连接的反向代理,不仅支持HTTP而且支持其他应用层协议,如FTP 我的问题 如果我只接受HTTP web流量,我们应该使用TCP代理而不是HTTP代理的用例是什么 这种理解是连接