Есть пример подключения к сокету на javascript.
self.ws = new WebSocket((window.location.protocol == "http:" ? "ws://" : "wss://") + window.location.host + "/api/get");
self.ws.onopen = function () {
if (self.__ws_task)
clearInterval(self.__ws_task);
self.ws.send(
JSON.stringify({
command: "subscribe",
data: 'test1:test2',
data2: '{temp:[32, 31, 41, 51, 55, 54, 61, 91], temp2:[1018433255,805863782,-3330707801]}'
})
);
};
Как сделать тоже самое в Java? И потом еще получать ПОСТОЯННО сообщения в ответ?
Пробовал так:
final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("ws://temp.com/api/get"));
clientEndPoint.addMessageHandler(new WebsocketClientEndpoint.MessageHandler() {
public void handleMessage(String message) {
System.out.println("message");
System.out.println(message);
}
});
WebsocketClientEndpoint.java
import org.codehaus.jettison.json.JSONObject;
import javax.websocket.*;
import java.net.URI;
@ClientEndpoint
public class WebsocketClientEndpoint {
Session userSession = null;
private MessageHandler messageHandler;
public WebsocketClientEndpoint(URI endpointURI) {
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(this, endpointURI);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Callback hook for Connection open events.
*
* @param userSession the userSession which is opened.
*/
@OnOpen
public void onOpen(Session userSession) {
System.out.println("opening websocket");
this.userSession = userSession;
JSONObject obj = new JSONObject();
try {
obj.put("command", "subscribe");
obj.put("data", "test1:test2");
obj.put("data2", "{temp:[32, 31, 41, 51, 55, 54, 61, 91], temp2:[1018433255,805863782,-3330707801]}");
String message = obj.toString();
} catch (Exception e) {
e.printStackTrace();
}
String message = obj.toString();
System.out.println(message);
this.sendMessage(message);
}
/**
* Callback hook for Connection close events.
*
* @param userSession the userSession which is getting closed.
* @param reason the reason for connection close
*/
@OnClose
public void onClose(Session userSession, CloseReason reason) {
System.out.println("closing websocket");
this.userSession = null;
}
/**
* Callback hook for Message Events. This method will be invoked when a client send a message.
*
* @param message The text message
*/
@OnMessage
public void onMessage(String message) {
if (this.messageHandler != null) {
this.messageHandler.handleMessage(message);
}
}
/**
* register message handler
*
* @param msgHandler
*/
public void addMessageHandler(MessageHandler msgHandler) {
this.messageHandler = msgHandler;
}
/**
* Send a message.
*
* @param message
*/
public void sendMessage(String message) {
System.out.println("send message");
this.userSession.getAsyncRemote().sendText(message);
}
/**
* Message handler.
*
* @author Jiji_Sasidharan
*/
public static interface MessageHandler {
public void handleMessage(String message);
}
}
Получаю такой результат:
opening websocket
{"command":"subscribe","data":"test1:test2","data2":"{temp:[32, 31, 41, 51, 55, 54, 61, 91], temp2:[1018433255,805863782,-3330707801]}"}
send message
Всем заранее спасибо за любой совет!
Для того, чтобы получать сообщения вы должны имплементить
self.ws.onmessage = function(event) {
//здесь вы можете делать что-нибудь с event
console.log(event.data);
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Всем привет, возникла проблема, я пытаюсь на удаленный сервер выложить свое приложение, но на сервере при чтении из файла Tomcat кидает FileNotFoundException...
Решил программировать на Java (до этого писал немного на Python)Для этого подумываю над изучением Spring и разработкой с его помощью