goEasy消息推送,pushlet 向特寫用戶實時推送

goEasyjavascript

1先去goEasy官網註冊goeasy.io,並建立application,獲得superKeyhtml

2引入js前端

<script type="text/javascript"src="https://cdn.goeasy.io/goeasy.js"></script>  java

3實例jquery

<html>
<head>
<base href="<%=basePath%>">

<title>index.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript"src="https://cdn.goeasy.io/goeasy.js"></script>
<script type="text/javascript" src="easyui/jquery.min.js"></script>web

<script type="text/javascript">
var goEasy = new GoEasy({appkey: 'eaf42b8e-b3bdc683b22'});
goEasy.subscribe({
channel: 'nuonuo_shop',
onMessage: function(message){
console.log(message);
alert('接收到消息:'+message.content);//拿到了信息以後,你能夠作你任何想作的事
}
});
</script>
<script type="text/javascript">
function sendnews(){
$.post("push/goeasy.do");
}
</script>

</head>
<body>
<input type = "button" value="發消息" onclick="sendnews()"/>
</body>
</html>ajax

 

下載goeasy-sdk.jar瀏覽器

@RequestMapping(value="/goeasy.do")
private void goeasy() {
GoEasy goEasy = new GoEasy("eaf42b8e-b30a-35bdc683b22");
goEasy.publish("nuonuo_shop", "我試試goeasy");
System.out.println("------goeasy-------");
}session

 

完成。app

4總結,一個application 最大鏈接數60,而且一個月發送+接收信息=10萬條,好比推送一條信息,10個瀏覽器接收,算11條信息。太少。適合小應用

 

pushlet

1下載pushlet.jar , pushletclient.jar

 

2修改ajax-pushlet-client.js,在PL對象後加入userId

var PL = {

     NV_P_FORMAT:  'p_format=xml-strict' ,
     NV_P_MODE:  'p_mode=pull' ,
     pushletURL:  null ,
     webRoot:  null ,
     sessionId:  null ,
     STATE_ERROR: -2,
     STATE_ABORT: -1,
     STATE_NULL: 1,
     STATE_READY: 2,
     STATE_JOINED: 3,
     STATE_LISTENING: 3,
     state: 1,
     userId:  '' , //添加的userId變量
 
3重現nl.justobjects.pushlet.core.SessionManager

public class MySessionManager extends SessionManager {

@Override
public Session createSession(Event anEvent) throws PushletException {
// TODO Auto-generated method stub
//HttpSession s = ServletActionContext.getRequest().getSession();
//String userid=s.getAttribute("userid")+"";
//return Session.create("xiexianyi");

return Session.create(anEvent.getField("userId""visitor"));//修改後的寫法
}

這是咱們就得到的session的id就是咱們傳送過來的登錄用戶userId,getField的第二個參數是當得不到請求參數userId的值的時候設定的默認值。 

 

 

4配置

web.xml

<servlet>
<servlet-name>pushlet</servlet-name>
<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>pushlet</servlet-name>
<url-pattern>/pushlet.srv</url-pattern>
</servlet-mapping>

 

pushlet.properties

sessionmanager.class=com.xiexy.project.test.pushlet.MySessionManager

sources.properties

source1=com.xiexy.project.test.pushlet.HelloWorldEventPullSource$HelloWorldEvent

public class HelloWorldEventPullSource implements Serializable{
private static final long serialVersionUID = 1L;
static public class HelloWorldEvent extends EventPullSource{


@Override
protected Event pullEvent() {
Event event =Event.createDataEvent("/source/event");//事件標識
// 注意:此處」/source/event」將對應頁面js代碼中的PjoinListen中的參數
event.setField("msg", "hello,world");//封裝參數
return event;
}

@Override
protected long getSleepTime() {
return 4000; //隔4秒刷新
}
}
}

 

5實例

<html>
<head>
<base href="<%=basePath%>">

<title>index.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/ajax-pushlet-client.js"></script>
<script type="text/javascript" src="easyui/jquery.min.js"></script>
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<!-- —js 從演示項目的 lib 下copy -->

<script type="text/javascript">
PL.userId='xxy';
PL._init();
PL.joinListen('/task/warn'); //事件標識 在數據源中引用
function onData(event) {
alert(event.get("msg"));
}
</script>


<script type="text/javascript">
function sendnews(){
 $.post("push/event.do");
}
</script>
</head>
<body>
<input type = "button" value="發消息" onclick="sendnews()"/>
</body>
</html>

 

@RequestMapping(value="/event.do")
public String myMulticast() throws Exception {

/**向全部和task/warn名稱匹配的事件推送**/
/* Event event = Event.createDataEvent("/task/warn");
event.setField("msg", "Xie XianYi");
Dispatcher.getInstance().multicast(event); // 向全部和task/warn名稱匹配的事件推送
System.out.println("向全部和task/warn名稱匹配的事件推送");*/


/**向全部的事件推送,不要求和這兒的myevent1名稱匹配**/
/* Event event2 = Event.createDataEvent("/guoguo/myevent1"); // 向全部的事件推送,不要求和這兒的myevent1名稱匹配
event2.setField("key1", "Broadcast msg");
Dispatcher.getInstance().broadcast(event2);
System.out.println("向全部的事件推送,不要求和這兒的myevent1名稱匹配");*/


/**向ID爲piero的用戶推送*/
Event event3 = Event.createDataEvent("/task/warn");
//event3.setField("msg", "pppp");
event3.setField("msg", new String("中文問題".getBytes("UTF-8"),"ISO-8859-1")); //如查推送的信息爲中文,前端JS不會返回信息。key不能是數字(包括數字字符串)
Dispatcher.getInstance().unicast(event3, "xxy"); // 向ID爲xxy的用戶推送
System.out.println("向ID爲xiexianyi的用戶推送");
//return event;

return "success";
}

 

完成。

6總結,比goeasy複雜不少。可是信息沒有數量限制。可看項目大小選擇。

 

主要爲本身作備忘,同時方便有須要的人。呵呵!