JAvaバックグラウンドでwebsocketクライアントおよびサービス側を実現
3940 ワード
最近、websocketをバックグラウンドで実行し、プッシュを受信し続けるサービスとして登録する必要があります.
この方法を使用するには、websocketのjarパッケージを導入する必要があります.ダウンロード先:https://download.csdn.net/download/qq_39481762/10739165
まずクライアントをservletとして登録することで,バックグラウンドでプッシュを受信し続けることができる.
Webでxml構成の追加
ここでload-on-startupラベルは、このメソッドの実行順序を指す
Websocketサービス
@ServerEndpoint("/ws/face")がフロント受信アドレス
フロントアクセス
この方法を使用するには、websocketのjarパッケージを導入する必要があります.ダウンロード先:https://download.csdn.net/download/qq_39481762/10739165
まずクライアントをservletとして登録することで,バックグラウンドでプッシュを受信し続けることができる.
public class FaceSocketClientManage extends HttpServlet {
private static final long serialVersionUID = 1L;
public static WebSocketClient client;
public static final String url = "ws://";
@Override
public void init() throws ServletException {
super.init();
try {
client = new WebSocketClient(new URI(url), new Draft_17()) {
@Override
public void onOpen(ServerHandshake arg0) {
// TODO Auto-generated method stub
System.out.println(" ");
}
@Override
public void onMessage(String arg0) {
FaceSocketServer server = new FaceSocketServer();
try {
server.onMessage(arg0);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Exception arg0) {
// TODO Auto-generated method stub
arg0.printStackTrace();
System.out.println(" ");
}
@Override
public void onClose(int arg0, String arg1, boolean arg2) {
// TODO Auto-generated method stub
System.out.println(" ");
}
@Override
public void onMessage(ByteBuffer bytes) {
try {
System.out.println(new String(bytes.array(), "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
};
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
client.connect();
client.send("hello world");
}
}
Webでxml構成の追加
ここでload-on-startupラベルは、このメソッドの実行順序を指す
FaceSocketClientManage
socket.FaceSocketClientManage
1
Websocketサービス
@ServerEndpoint("/ws/face")がフロント受信アドレス
@ServerEndpoint("/ws/face")
@Component
public class FaceSocketServer {
private Logger logger = LoggerFactory.getLogger(FaceSocketServer.class);
private static final String SOCKET = "FaceWebSocket_";
private Session session;
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
@OnOpen
public void onOpen(Session session) throws Exception {
logger.error("@onopen ");
this.session = session;
FaceSocketMapUtil.put(SOCKET + session.getId(), session);
}
@OnClose
public void onClose() throws Exception {
FaceSocketMapUtil.remove(SOCKET + session.getId());
}
@OnMessage
public void onMessage(String message) throws IOException {
try {
logger.info("websocket :" + message);
this.sendMessageAll(message);
} catch (Exception e) {
logger.error("@OnMessage onMessage:", e.getLocalizedMessage());
}
}
@OnError
public void onError(Session session, Throwable error) {
logger.error("@OnError OnError:", error.getLocalizedMessage());
}
//
private synchronized void sendMessageAll(String message) throws IOException {
for (Session session : FaceSocketMapUtil.getValues()) {
session.getBasicRemote().sendText(message);
}
}
}
フロントアクセス
$(function() {
var ws = null;
if ('WebSocket' in window) {
ws = new WebSocket(ws_prefix+"/ws/face");
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(
ws_prefix+"/ws/face");
} else {
console.log(" WebSocket");
}
ws.onopen = function(e) {
console.log(" ");
}
ws.onclose = function(e) {
console.log(" ");
}
ws.onmessage = function(e) {
var str = e.data;
}
});