国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Web Socket 多個(gè)用戶之間實(shí)現(xiàn)時(shí)時(shí)消息推送

1個(gè)月不寫博客了,最近挺忙的,剛用了2天寫了個(gè)預(yù)約的小程序和大家分享下~


首先大家看下界面:

1.秘書端 - 專門添加預(yù)約的內(nèi)容,添加以后立馬在 “市長(zhǎng)端” 彈出有一個(gè)新的預(yù)約


2.市長(zhǎng)端 - 專門看最新的預(yù)約 ,看看要不要接待,接待或不接待點(diǎn)擊按鈕以后以后立馬 回復(fù)秘書


其實(shí)挺簡(jiǎn)單的一個(gè)需求啊,但是其中用到的東西還真是挺多的

1.socket server端 和 web socket client端 中的消息時(shí)時(shí)分發(fā)到各個(gè) client端
2. ajax json 數(shù)據(jù)查詢和UI渲染包括一些css的動(dòng)畫

setp1. 我先按照web的做法把ui和各個(gè)頁面的效果做出來

setp2. 完善好所有不是實(shí)時(shí)同步的業(yè)務(wù)流程

setp3. 根據(jù)websocket 分發(fā)的數(shù)據(jù),挑選是自己的,audio提示:您有一個(gè)新的消息,然后調(diào)用ajax刷新數(shù)據(jù)來實(shí)現(xiàn)實(shí)時(shí)同步

setp4. 添加完或者接待完 使用send (admin_id,to_admin_id) 方法推送給某個(gè)人,然后某個(gè)人的ui進(jìn)行重新ajax渲染


部分代碼:

web socket client 端 api.jsp 把所用同步的回調(diào)方法和上線,下線,發(fā)送,播放聲音都放在一個(gè)jsp中 需要的頁面直接:iframe引入

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ include file="/config.jsp"%>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>web socket api</title>  
  7.     <base href="<%=$.root() %>" />  
  8.     <meta http-equiv="pragma" content="no-cache">  
  9.     <meta http-equiv="cache-control" content="no-cache">  
  10.     <meta http-equiv="expires" content="0">      
  11.   </head>  
  12.   <body>  
  13.     <audio id="audio" preload="auto" controls="controls" height="100" width="100">  
  14.             <source src="qiyulin/song.ogg" type="audio/ogg" />  
  15.             <source src="qiyulin/song.mp3" type="audio/mp3" />  
  16.             <embed height="100" width="100" src="qiyulin/song.mp3" />  
  17.     </audio>  
  18.     <script type="text/javascript"> var tcp_url='<%=tcp_url %>'; </script>  
  19.     <script type="text/javascript" src="qiyulin/prototype.js"></script>  
  20.     <script type="text/javascript">  
  21.         var ws =null;  
  22.         //play  
  23.         var play = function(){  
  24.             var audio = document.getElementById('audio');  
  25.             audio.play();  
  26.         }  
  27.           
  28.         //offline  
  29.         var offline = function(){  
  30.              log("[WebSocket#close]\n");  
  31.              if (ws!=null) {  
  32.                  ws.close();  
  33.                  ws = null;  
  34.              }  
  35.         }  
  36.           
  37.         //online   
  38.         var online = function(){  
  39.              if(ws==null){  
  40.                   ws = new WebSocket(tcp_url);  
  41.                   ws.onopen = function() {  
  42.                          log("[WebSocket#onopen]\n");  
  43.                          window.parent.online();  
  44.                    }  
  45.                    ws.onmessage = function(e) {  
  46.                         log("[WebSocket#onmessage] Message: '" + e.data + "'\n");  
  47.                         window.parent.message(e.data);  
  48.                     }  
  49.                    ws.onclose = function() {  
  50.                         log("[WebSocket#onclose]\n");  
  51.                          if (ws) {  
  52.                              ws.close();  
  53.                              ws = null;  
  54.                          }  
  55.                          window.parent.offline();  
  56.                     }  
  57.                 }  
  58.         }  
  59.           
  60.         //send  
  61.         var send = function(admin_id,to_admin_id){  
  62.             if(ws!=null){  
  63.                 var json ='{"admin_id":'+admin_id+',"to_admin_id":'+to_admin_id+'}';  
  64.                 ws.send(json);  
  65.             }else{  
  66.                 online();  
  67.                 var json ='{"admin_id":'+admin_id+',"to_admin_id":'+to_admin_id+'}';  
  68.                 ws.send(json);  
  69.             }  
  70.         }  
  71.           
  72.          function log(text) {  
  73.             var str=(new Date).getTime() + ": " + (!Object.isUndefined(text) && text !== null ? text.escapeHTML() : "null") ;  
  74.             console.log(str);  
  75.          }  
  76.           
  77.         document.observe("dom:loaded", function() {  
  78.              if (!window.WebSocket) {  
  79.                   alert("不支持WebSocket!");  
  80.                   return;  
  81.               }  
  82.              online();  
  83.         });  
  84.     </script>  
  85.   </body>  
  86. </html>  

socket server端 因?yàn)槭莣eb的,所以在web.xml中配置 一個(gè)ContextListener

  1. public class TcpServerListener  implements ServletContextListener{  
  2.       
  3.     private TcpServer s;  
  4.       
  5.     public void contextInitialized(ServletContextEvent arg0) {  
  6.         int port = 8887;  
  7.         try {  
  8.             s = new TcpServer( port );  
  9.             s.start();  
  10.             System.out.println( "TCPSERVER START ON PORT: " + s.getPort() );  
  11.         } catch (UnknownHostException e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.     }  
  15.     public void contextDestroyed(ServletContextEvent arg0) {  
  16.         try {  
  17.             s.stop();  
  18.         } catch (Exception e) {  
  19.             e.printStackTrace();  
  20.         }   
  21.     }  
  22. }  

請(qǐng)求json數(shù)據(jù) java action 端
  1. public void visitorjson(){  
  2.     String page = $.get("p");  
  3.     if($.empty(page)) page ="1";  
  4.     Map admin = (Map)$.session("admin");  
  5.     int s = $.time($.date());  
  6.     int e = s+24*60*60;  
  7.     String where=" and start_time>"+s+" and start_time<"+e;  
  8.     String start="select *";  
  9.     String cstart="select count(*) c";  
  10.     String sql=" from record where status=1 and admin_id="+admin.get("id")+" "+where;  
  11.     String limit =" order by start_time desc ";  
  12.     List<Map> list = new ArrayList<Map>();  
  13.     StringBuilder count = new StringBuilder("0");  
  14.     $.dbcp().query(start+sql+limit,list).count(cstart+sql,count).close();  
  15.     $.json("status",1).json("list",list).json("count",count).out();  
  16. }  


查詢list 和 共多少條 ,然后返回json。是不是很優(yōu)雅~~
  1. $.dbcp().query(sql1,list).count(sql2,count).close();  
  2. $.json("status",1).json("list",list).json("count",count).out();  


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
最簡(jiǎn)單的WebRTC示例
WebSocket的簡(jiǎn)單介紹及應(yīng)用
前端通信進(jìn)階
WebSocketDemo
Introduction | Socket.IO
用jetty搭建websocket服務(wù)并與ie78兼容的方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服