자바 와 위 챗 애플 릿 은 웹 소켓 의 긴 연결 을 실현 합 니 다.
배경:
애플 릿 에서 맵 의 고정 좌표 아래 실시 간 으로 정 보 를 볼 필요 가 있 습 니 다.
java 환경:tomcat 7 jdk 1.7
1.java
웹 소켓 클래스
package com.qs.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import com.qs.controller.UserController;
/**
* @ServerEndpoint , websocket ,
* URL , URL WebSocket
*/
@ServerEndpoint("/websocket")
public class WebSocketTest {
// , 。 。
private static int onlineCount = 0;
//concurrent Set, MyWebSocket 。 , Map , Key
private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>();
// ,
private Session session;
/**
*
* @param session 。session ,
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this); // set
addOnlineCount(); // 1
System.out.println(" ! " + getOnlineCount());
}
/**
*
*/
@OnClose
public void onClose(){
webSocketSet.remove(this); // set
subOnlineCount(); // 1
System.out.println(" ! " + getOnlineCount());
}
/**
*
* @param message
* @param session
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println(" :" + message);
//
for(WebSocketTest item: webSocketSet){
try {
item.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
/**
*
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error){
System.out.println(" ");
error.printStackTrace();
}
/**
* 。 , 。
* @param message
* @throws IOException
*/
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
//this.session.getAsyncRemote().sendText(message);
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketTest.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketTest.onlineCount--;
}
}
2. jsp
<%@ page language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Java WebSocket Tomcat </title>
</head>
<body>
Welcome<br/><input id="text" type="text"/>
<button onclick="send()"> </button>
<hr/>
<button onclick="closeWebSocket()"> WebSocket </button>
<hr/>
<div id="message"></div>
</body>
<script type="text/javascript">
var websocket = null;
// WebSocket
if ('WebSocket' in window) {
websocket = new WebSocket("ws://image.aropen.com/Image-retrievals/websocket");
}
else {
alert(' Not support websocket')
}
//
websocket.onerror = function () {
setMessageInnerHTML("WebSocket ");
};
//
websocket.onopen = function () {
setMessageInnerHTML("WebSocket ");
}
//
websocket.onmessage = function (event) {
setMessageInnerHTML(event.data);
}
//
websocket.onclose = function () {
setMessageInnerHTML("WebSocket ");
}
// , , websocket , ,server 。
window.onbeforeunload = function () {
closeWebSocket();
}
//
function setMessageInnerHTML(innerHTML) {
document.getElementById('message').innerHTML += innerHTML + '<br/>';
}
// WebSocket
function closeWebSocket() {
websocket.close();
}
//
function send() {
var message = document.getElementById('text').value;
var arr=['zhangsan,hello,1','lisi,word,1','wangwu,hi,1','zhaoliu,hehe,1','tianqi,haha,1'];
window.setInterval(function(){
websocket.send(arr[Math.floor(Math.random()*4)]);
},5000);
//websocket.send(message);
}
</script>
</html>
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.