Websocketはデータベースを動的にリスニングし、データが変化した場合にページデータを更新します.デッドサイクルとデータのredisへのキャッシュを防止
25006 ワード
ページの接続:
バックグラウンドコードはデータベースの変化を傍受し,変化がある場合はフロントにメッセージを送信し,フロントエンドは返された値に応じて対応する操作を行う.
onMessageメソッド
sendMessage()メソッド
プロジェクト中に発生した問題と注意点
デッドサイクルはプロジェクトのデータ量が大きいため、データ更新時にredisキャッシュに格納し、ページ表示を行う必要があります.フロントエンドonMessageメソッドの役割
バックグラウンドwebsocketがメッセージを送信するかどうかを傍受するために使用される.この送信メッセージはバックグラウンドを呼び出すonMessageメソッドではなく、群発メッセージを呼び出すかどうかであり、群発メッセージの場合、フロントエンドのonMessageイベントがトリガーされ、サーバから送信されたこのデータ「1」を受信することができる.
フロントエンドの*socket.send()はメソッドのフロントエンドでバックエンドにメッセージを送信し、バックエンドのonMessageメソッドをトリガーすることができます.
ここではデッドループフロントがメッセージを受信し、onMessageイベントをトリガし、トリガ後にsocketを呼び出すことに注意する.send()メソッド、このsocket.send()はバックグラウンドのonMessage()メソッドをトリガーし、バックグラウンドのonMessage()はsendMessage()を呼び出し、このメソッドのitem.session.getBasicRemote().sendText(“1”);フロントエンドのonMessageイベントをトリガーし、デッドサイクルに入ることができます
フロントエンドコードとバックグラウンドコードの変更
バックグラウンドコードの変更
データベースのリスニング
2つのバックグラウンドがフロントエンドにメッセージを送信する方法を定義し、現在のエンドが2を受信すると、データキャッシュが成功したことを示し、バックグラウンドを要求し、まずredisから値を取得すればよい.
function websocket(){
if ("WebSocket" in window){// websocekt
//var host = "ws://localhost/websocketindex/"// Ip
var socket = new WebSocket(host);
try {
socket.onopen = function()// socekt
{
console.log("WebSocket ");
};
socket.onmessage = function(event)// socekt
{
console.log(event.data);
if(event.data=="1"){
console.log(" ");
socket.send(" ");
}
};
socket.onclose = function()// socekt
{
console.log("WebSocket ");
socket.close();
};
socket.onerror = function(obj)//
{
console.log("Socket ");
};
}
catch (ex) {
log(ex);
}
}
else{
alert(" , Internet Explorer 10(0) ");
}
}
バックグラウンドコードはデータベースの変化を傍受し,変化がある場合はフロントにメッセージを送信し,フロントエンドは返された値に応じて対応する操作を行う.
int m = userDao.insert(user);//
if(m>0) {
// ,webSocket
WebSocketServlet wss = new WebSocketServlet();
try {
wss.sendMessage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
onMessageメソッド
@OnMessage
public void onMessage(String msg,Session session) {
try {
sendMessage();
} catch (IOException e) {
e.printStackTrace();
}
}
sendMessage()メソッド
public void sendMessage() throws IOException{
//
for(WebSocketServlet item: webSocketSet){
// : , 1, 1,
item.session.getBasicRemote().sendText("1");
}
}
プロジェクト中に発生した問題と注意点
デッドサイクルはプロジェクトのデータ量が大きいため、データ更新時にredisキャッシュに格納し、ページ表示を行う必要があります.
socket.onmessage = function(event)
{event.data==1}
バックグラウンドwebsocketがメッセージを送信するかどうかを傍受するために使用される.この送信メッセージはバックグラウンドを呼び出すonMessageメソッドではなく、群発メッセージを呼び出すかどうかであり、群発メッセージの場合、フロントエンドのonMessageイベントがトリガーされ、サーバから送信されたこのデータ「1」を受信することができる.
//
for(WebSocketServlet item: webSocketSet){
// : , 1, 1,
item.session.getBasicRemote().sendText("1");
}
フロントエンドの*socket.send()はメソッドのフロントエンドでバックエンドにメッセージを送信し、バックエンドのonMessageメソッドをトリガーすることができます.
ここではデッドループフロントがメッセージを受信し、onMessageイベントをトリガし、トリガ後にsocketを呼び出すことに注意する.send()メソッド、このsocket.send()はバックグラウンドのonMessage()メソッドをトリガーし、バックグラウンドのonMessage()はsendMessage()を呼び出し、このメソッドのitem.session.getBasicRemote().sendText(“1”);フロントエンドのonMessageイベントをトリガーし、デッドサイクルに入ることができます
フロントエンドコードとバックグラウンドコードの変更
function websocket(){
if ("WebSocket" in window){// websocekt
//var host = "ws://localhost/websocketindex/"// Ip
var socket = new WebSocket(host);
try {
socket.onopen = function()// socekt
{
console.log("WebSocket ");
};
socket.onmessage = function(event)// socekt
{
console.log(event.data);
**// onMessage , 1, , onMessage ,socket.send(), onMessage **
if(event.data=="1"){
console.log(" ");
socket.send(" ");
}
if(event.data=="2"){
console.log
}
};
socket.onclose = function()// socekt
{
console.log("WebSocket ");
socket.close();
};
socket.onerror = function(obj)//
{
console.log("Socket ");
};
}
catch (ex) {
log(ex);
}
}
else{
alert(" , Internet Explorer 10(0) ");
}
}
バックグラウンドコードの変更
データベースのリスニング
int m = userDao.insert(user);//
if(m>0) {
// ,webSocket
WebSocketServlet wss = new WebSocketServlet();
try {
wss.sendMessage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@OnMessage
public void onMessage(String msg,Session session) {
try {
saveRedis();// redis
sendMessage2();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2つのバックグラウンドがフロントエンドにメッセージを送信する方法を定義し、現在のエンドが2を受信すると、データキャッシュが成功したことを示し、バックグラウンドを要求し、まずredisから値を取得すればよい.
public void sendMessage() throws IOException{
//
for(WebSocketServlet item: webSocketSet){
item.session.getBasicRemote().sendText("1");
}
}
public void sendMessage2() throws IOException{
//
for(WebSocketServlet item: webSocketSet){
item.session.getBasicRemote().sendText("2");
}
}