怎么调用websocket作为通道发送数据
1.现有多个线程查询不同的设备获取不同的数据。
2.当网页打开后自动产生一个websocket连接。
上面12两点已经完成,但是现在对我来说查询线程和websocket它们相互独立,怎么才能在查询线程中调用websocket的send方法把数据传到前台网页呢。
解决方案:
package com.quantfn.strategy.atrfuture.test;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
public class TestApp {
public static void main(String[] args) {
try {
// 这里用的binance的socket接口,国内调用需要VPN,使用换成你的就行
// String url = "wss://stream.binance.com:9443/ws/ethbtc@ticker";
// String url = "wss://stream.binance.com:9443/ws/ethbtc@depth20";
String url = "wss://stream.binance.com:9443/stream?streams=ethbtc@ticker/ethbtc@depth20/trxbtc@ticker/trxbtc@depth20";
URI uri = new URI(url);
WebSocketClient mWs = new WebSocketClient(uri){
@Override
public void onOpen(ServerHandshake serverHandshake) {
}
@Override
public void onMessage(String s) {
System.out.println(s);
}
@Override
public void onClose(int i, String s, boolean b) {
}
@Override
public void onError(Exception e) {
}
};
mWs.connect();
System.out.println("haha");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.yudu.sms.util;
import com.alibaba.fastjson.JSONObject;
import org.java_websocket.WebSocket;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
import java.net.URISyntaxException;
public class YiWeiDialUtil {
private static final Logger logger = LoggerFactory.getLogger(YiWeiDialUtil.class);
public static void dial(String ws, String phone, String recordName) {
try {
URI uri = new URI(ws);
WebSocketClient client = new WebSocketClient(uri) {
@Override
public void onOpen(ServerHandshake serverHandshake) { }
@Override
public void onMessage(String s) {
logger.info("返回的数据:" + s);
JSONObject jo = JSONObject.parseObject(s);
String dynamicdata = jo.getString("dynamicdata");
if (dynamicdata != null) {
JSONObject jo_dynamicdata = JSONObject.parseObject(dynamicdata);
String realtimestate = jo_dynamicdata.getString("realtimestate");
if (realtimestate.equals("outconnected")) {
send("{\"command\":\"closeheadsettochannel\"}");
String recordMp3 = System.getProperty("user.dir") + "\\src\\main\\resources\\" + recordName + ".mp3";
String record = "{\"command\":\"PlayStartRecord\",\"arguments\":{\"content\":\"" + recordMp3 + "\"}}";
send(record);
}
}
}
@Override
public void onClose(int i, String s, boolean b) { }
@Override
public void onError(Exception e) {
logger.error(e.getMessage());
}
};
//建立连接
client.connect();
while (!client.getReadyState().equals(WebSocket.READYSTATE.OPEN)) {
logger.info("连接中...");
}
String dial = "{\"command\":\"Dial\",\"arguments\":{\"phone\":\"" + phone + "\"}}";
client.send(dial);
} catch (URISyntaxException e) {
logger.info(e.getMessage());
}
}
}