81,092
社区成员
发帖
与我相关
我的任务
分享
/**
* 定时发送
*/
this.timedExecution = function()
{
setInterval(function(){
websocketInit();
},10000);
}
/**
* websocket初始化
*/
function websocketInit()
{
var ws = new WebSocket('ws: //localhost:8888/websocket');
ws.onopen = function()
{
var geekHomeUser = $.parseJSON($.cookie('geek_home_user'));
ws.send(geekHomeUser.userName);
};
ws.onmessage = function(evt)
{
var geekHomeUser = $.parseJSON($.cookie('geek_home_user'));
geekHomeUser.signUpState = evt.data;
$.cookie('geek_home_user',JSON.stringify(geekHomeUser), {expires: 7});
if(evt.data == 0){
// console.log($.parseJSON($.cookie('geek_home_user')));
$("#m_Iframe").contents().find("#signOrNot").text("签到");
}
};
ws.onclose = function(evt)
{
console.log("WebSocketClosed!");
};
ws.onerror = function(evt)
{
console.log("WebSocketError!");
};
}
前台。
package com.geekhome.config;
import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;
import com.geekhome.common.utils.SpringContextUtils;
import com.geekhome.entity.Integral;
import com.geekhome.entity.service.IntegralService;
@Component
@ServerEndpoint(value = "/websocket")
public class WebSocket
{
@OnOpen
public void onOpen(){
System.out.println("连接已完成");
}
@OnMessage
public void say(String message, Session session){
try {
IntegralService integralService = (IntegralService)SpringContextUtils.getBeanByClass(IntegralService.class);
Integral integral = integralService.findIntegralByUserName(message);
session.getBasicRemote().sendText(String.valueOf(integral.getState()));
} catch (IOException e) {
e.printStackTrace();
}
}
@OnError
public void onError(Throwable t){//参数必须加上,不然不能启动
System.out.println("error");
}
@OnClose
public void onClose(){
System.out.println("close");
}
}
后台[quote=引用 13 楼 qq_29548659 的回复:] [quote=引用 11 楼 zhangdehua678 的回复:] [quote=引用 9 楼 qq_29548659 的回复:] 客户端发出一个http长连接请求,然后等待服务器的响应。这个请求是异步的,所以客户端可以继续工作,比如发起其他ajax请求等等。这个时候客户端就是一个待推倒的小萝莉了。 服务器接到请求之后,并不立即发送出数据,而是hold住这个connecton。这个处理是非阻塞的,所以服务器可以继续处理其他请求。 在某个时刻,比如服务器有新数据了,服务器再主动把这个消息推送出去,即通过之前建立好的连接将数据推送给客户端。 客户端收到返回。这个时候就可以处理数据,然后再次发起新的长连接。
webSocket完美解决。
[quote=引用 15 楼 maradona1984 的回复:] [quote=引用 13 楼 qq_29548659 的回复:] [quote=引用 11 楼 zhangdehua678 的回复:] [quote=引用 9 楼 qq_29548659 的回复:] 客户端发出一个http长连接请求,然后等待服务器的响应。这个请求是异步的,所以客户端可以继续工作,比如发起其他ajax请求等等。这个时候客户端就是一个待推倒的小萝莉了。 服务器接到请求之后,并不立即发送出数据,而是hold住这个connecton。这个处理是非阻塞的,所以服务器可以继续处理其他请求。 在某个时刻,比如服务器有新数据了,服务器再主动把这个消息推送出去,即通过之前建立好的连接将数据推送给客户端。 客户端收到返回。这个时候就可以处理数据,然后再次发起新的长连接。