Так что после этого вопроса (how to plug a TCP-IP client server in a spring MVC application), Я смог успешно подключить шлюз к контроллеру REST Spring. Тем не менее, я смущен относительно того, куда идти дальше. Вот что я пытаюсь выполнить:Как настроить клиентскую и серверную модели Spring TCP?
1) Когда определенный маршрут получает запрос POST, откройте подключение к определенному IP-адресу (или работайте с соединением, которое уже открыто с этим IP-адресом), переданным из POST и отправить сообщение.
@RequestMethod(value = '/sendTcpMessage', method=RequestMethod.POST)
public void sendTcpMessage(@RequestParam(value="ipAddress", required=true) String ipAddress,
@RequestParam(value="message", required=true) String message) {
//send the message contained in the 'message' variable to the IP address located
//at 'ipAddress' - how do I do this?
}
2) Я также нужна моя весна бэкенд слушать TCP «сообщения», переданными ему, и хранить их в буфере. Мой Javascript будет вызывать маршрут каждые 5 секунд или около того и считывать информацию из буфера.
Вот мой код контроллера:
@Controller
public class HomeController {
@Resource(name = "userDaoImpl")
private UserDAO userDao;
@Resource(name = "receiveTcp")
private ReceiveTcp tcpMessageReceiver;
@Autowired
SimpleGateway gw;
String tcpBuffer[] = new String[100];
@RequestMapping(value="/")
public String home() {
return "homepage";
}
@RequestMapping(value = "/checkTcpBuffer", method=RequestMethod.POST)
public String[] passTcpBuffer() {
return tcpMessageReceiver.transferBuffer();
}
}
корня context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-ip="http://www.springframework.org/schema/integration/ip"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/ip http://www.springframework.org/schema/integration/ip/spring-integration-ip.xsd
http://www.springframework.org/schema/integration/ http://www.springframework.org/schema/integration/spring-integration.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<int:gateway id="gw"
service-interface="net.codejava.spring.interfaces.SimpleGateway"
default-request-channel="input"/>
<bean id="javaSerializer"
class="org.springframework.core.serializer.DefaultSerializer"/>
<bean id="javaDeserializer"
class="org.springframework.core.serializer.DefaultDeserializer"/>
<int-ip:tcp-connection-factory id="server"
type="server"
port="8081"
deserializer="javaDeserializer"
serializer="javaSerializer"
using-nio="true"
single-use="true"/>
<int-ip:tcp-connection-factory id="client"
type="client"
host="localhost"
port="8081"
single-use="true"
so-timeout="10000"
deserializer="javaDeserializer"
serializer="javaSerializer"/>
<int:channel id="input" />
<int:channel id="replies">
<int:queue/>
</int:channel>
<int-ip:tcp-outbound-channel-adapter id="outboundClient"
channel="input"
connection-factory="client"/>
<int-ip:tcp-inbound-channel-adapter id="inboundClient"
channel="replies"
connection-factory="client"/>
<int-ip:tcp-inbound-channel-adapter id="inboundServer"
channel="loop"
connection-factory="server"/>
<int-ip:tcp-outbound-channel-adapter id="outboundServer"
channel="loop"
connection-factory="server"/>
<int:service-activator input-channel="input" ref="receiveTcp" method = "saveValue"/>
</beans>
ReceiveTcp.java
@Component(value = "receiveTcp")
public class ReceiveTcp {
String buf[] = new String[100];
int currentPosition = 0;
@ServiceActivator
public void saveValue(String value){
System.out.println(value);
buf[currentPosition] = value;
currentPosition++;
}
public String[] transferBuffer() {
String tempBuf[] = new String[100];
tempBuf = buf;
buf = new String[100];
return tempBuf;
}
}
Как я могу г решить эти проблемы?
Hi @GaryRussell, еще раз спасибо за ваш ответ. Я очень новичок и в Spring, и в работе с TCP, поэтому извиняюсь за ошибки начинающего и стараюсь быть терпеливым со мной :). Я изменил свой вопрос и попытался выполнить то, что вы указали, - это выглядит правильно? Кроме того, отправка сообщения будет такой же простой, как вызов 'gw.send (« message »);'? Я просматривал документацию и видел, как люди посылают такую информацию. – Tylerlee12
Привет, Гэри, у меня вопрос о том, нужно ли нам отправлять пользовательский объект java, а не строку из простого шлюза somethiung like - send (obj), то что мы должны делать. Я попробовал ур пример, со строкой он работает, но пользовательский объект hava это не так. Не могли бы вы сообщить мне, какие изменения я должен внести. – RCS
Лучше задавать новый вопрос, а не комментировать существующий. Вы не можете отправлять произвольные объекты Java через TCP.Если ваши объекты «Serializable», вы можете использовать [DefaultSerializer - см. Документацию] (http://docs.spring.io/spring-integration/reference/html/ip.html#connection-factories). Если нет, вам нужно преобразовать свои объекты в/из транспорта, например JSON. –