我需要实现一个TCP服务器,它基本上应该在与客户端握手时打开一个套接字。
套接字打开后服务器需要保持套接字打开,并且能够通过打开的套接字将消息从服务器推送到客户端
我查看了一些spring集成示例,但不确定我所看到的示例是否确实参考了我的需求。
1. Spring集成tcp是否有这种能力来保持打开套接字并将消息从服务器发送到客户端?
服务器还应支持传入请求
客户端实现是作为简单Tcp java客户端编写的模拟
谢谢!尼尔
此处上下文配置
<int-ip:tcp-connection-factory id="server"
type="server"
port="5679"
host="localhost"
single-use="false"
deserializer="javaDeserializer"
serializer="javaSerializer" />
<int-ip:tcp-inbound-channel-adapter id="inboundServer"
channel="inloop"
connection-factory="server" client-mode="false"/>
<int-ip:tcp-outbound-channel-adapter id="outboundServer"
channel="outloop"
connection-factory="server" client-mode="false"/>
<channel id="inloop"/>
<channel id="outloop"/>
在我使用的服务器端
outputchanel.send(new GenericMessage<String>("HI World from server16\n",header));
并在客户端读取推送消息
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socketClient.getInputStream()));
while ((serverResponse = stdIn.readLine()) != null) {
_logger.info("RESPONSE FROM SERVER::"+serverResponse);
}
客户端是一个基于java的tcp客户端,未配置spring集成,这是一个用于将来集成的模拟客户端
为了支持echo服务器对字节数组不以“\n”终止的请求,我扩展了AbstractByteArraySerializer,并重写了反序列化
public byte[] deserialize(InputStream inputStream) throws IOException {
_Logger.trace("start deserialize");
byte[] result;
try {
byte[] buffer = new byte[getMaxMessageSize()];
int numOfBytes = inputStream.read(buffer, 0, buffer.length);
result = copyToSizedArray(buffer, numOfBytes);
} catch (IOException e) {
_Logger.error("Exception on deserialize tcp inbound stream ", e);
//publishEvent(e, , n);
throw e;
}
return result;
}
您可以使用协作通道适配器在对等方之间进行完全任意的消息传递。
请参阅TCP事件。
当客户端连接时,tcp入站通道适配器(实际上是连接工厂)将发布TcpConnectionOpenEvent。
您可以使用Application ationListener
来接收这些事件。
事件包含连接ID。然后,您可以开始向tcp出站通道适配器发送消息,消息头中名为ip\U connectionId(IpHeaders.CONNECTION\U ID)。
入站适配器从客户端接收的入站消息(如果有)在标头中具有相同的值。
只需配置服务器连接工厂并配置两个适配器即可使用它。
如果服务器必须打开套接字,请使用
client-mode="true"
并注入客户端连接工厂。
[服务器]:
客户端关于推送的方法只有两个,它们分别是: Subscribe 方法 Subscribe(name string, id string, settings *InvokeSettings, callback interface{}) (err error) Subscribe 方法的用处是订阅服务器端的推送服务。该方法有两种方式,一种是自动获取设置客户端 id,另一种是手动设置客户端 id。 参数
可能是一个简单的方法, 我想要的是:我有一个监听传入连接的tcp服务器。当客户连接时,我希望以某种方式得到通知。TcpNetServerConnectionFactory内部有这样的信息"接受的连接..."。 有一个TcpConnectionSupport类,但是我找不到如何使用它的方法。我正在寻找类似的用户模式。 有什么办法可以做到吗?
创建 TCP 服务器 使用最简单的方法来创建一个 TCP 服务器,使用所有默认选项如下所示: NetServer server = vertx.createNetServer(); 配置 TCP 服务器 如果你不想默认值,可以将服务器配置通过传入一个NetServerOptions实例来创建它: NetServerOptions options = new NetServerOptions().s
创建 TCP 客户端 最简单的方法来创建一个 TCP 客户端,使用默认选项如下所示: NetClient client = vertx.createNetClient(); 配置 TCP 客户端 如果你不想使用默认值,则创建TCP 客户端时,通过传入NetClientOptions实例可以配置: NetClientOptions options = new NetClientOptions().s
我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s