`
jsczxy2
  • 浏览: 1284292 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

基于DWR的点对点聊天实现 server---client

阅读更多

本文转自:http://htj1231825.iteye.com/blog/2206526

RemoteMessageServer 客服类 

Java代码  收藏代码
  1. package com.gw.medical.hospital.utils.dwr;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpSession;  
  7.   
  8. import org.directwebremoting.ScriptBuffer;  
  9. import org.directwebremoting.ScriptSession;  
  10. import org.directwebremoting.WebContextFactory;  
  11. import org.directwebremoting.annotations.RemoteMethod;  
  12. import org.directwebremoting.annotations.RemoteProxy;  
  13.   
  14. @RemoteProxy(name = "RemoteMessageServer")  
  15. public class RemoteMessageServer {  
  16.   
  17.     /** 
  18.      *服务端初始化 
  19.      */  
  20.     @RemoteMethod  
  21.     public void onPageLoad() {  
  22.         getHttpSession().setAttribute("userInfo""CustomerService1"); // 测试用,存入模拟userInfo信息  
  23.         RemoteMessageConstant.getServerList().put(getScriptSession().getId(), getScriptSession());// 存储当前客服,到在线客服列表  
  24.     }  
  25.   
  26.     /** 
  27.      * 服务端发送信息 
  28.      *  
  29.      * @param message 
  30.      */  
  31.     @RemoteMethod  
  32.     public void addMessage(final String message) {  
  33.         HttpSession httpsession = getHttpSession();// 获取session  
  34.         String clientName = httpsession.getAttribute("clientName") == null ? "" : httpsession.getAttribute("clientName").toString();// 当前客户端ID  
  35.         ScriptSession session = RemoteMessageConstant.getMapList().get(clientName);// 根据clientName获取scriptSession;  
  36.         if (session != null) {  
  37.             // 发送消息  
  38.             String serverMessage=getHttpSession().getAttribute("userInfo").toString();  
  39.             serverMessage=serverMessage+":"+message;  
  40.             sendMessage(session,"receiveMessages",serverMessage);  
  41.         }  
  42.     }  
  43.   
  44.     /** 
  45.      * 选择下一个客户端 
  46.      *  
  47.      * @return boolean 
  48.      */  
  49.     @RemoteMethod  
  50.     public String selectClient() {  
  51.         addMessage("本次会话结束!感谢您的咨询!");  
  52.         // 销毁上一位客户  
  53.         removeClient();  
  54.         ScriptSession sessionServer = getScriptSession();// 获取客服ScriptSsession  
  55.         HttpSession httpsession = getHttpSession();// 获取session  
  56.         Map<String, ScriptSession> userMap = RemoteMessageConstant.getMapList();// 用户在线MAP  
  57.         Iterator<String> iterator = userMap.keySet().iterator();  
  58.         String clientName = "";// 获取客户端列表中的,clientName;  
  59.   
  60.         while (iterator.hasNext()) {  
  61.             // 判断当前用户是否有客服接入,如未接入,接入该客户  
  62.             String tempName = iterator.next();  
  63.             if (RemoteMessageConstant.getMappingList().get(tempName) == null) {  
  64.                 clientName = tempName;  
  65.                 break;  
  66.             }  
  67.         }  
  68.         ScriptSession session = userMap.get(clientName);// 根据clientName获取scriptSession;  
  69.         // 更改客户端的服务ID  
  70.         if (session != null) {  
  71.             // 调用页面JS  
  72.             sendMessage(session, "setServerName", httpsession.getAttribute("userInfo").toString());  
  73.             httpsession.setAttribute("clientName", clientName);// 存储当前客户ID  
  74.             RemoteMessageConstant.getMappingList().put(session.getId(), sessionServer);// 存储对应关系,到关系MAP  
  75.             return RemoteMessageConstant.getUserNamList().get(clientName);  
  76.         }  
  77.   
  78.         return "";  
  79.     }  
  80.   
  81.     /** 
  82.      * 销毁当前,服务端对应的客户端信息 
  83.      */  
  84.     public void removeClient() {  
  85.         HttpSession httpSession = getHttpSession();// 获取httpsession  
  86.         String clientName = httpSession.getAttribute("clientName") == null ? "" : httpSession.getAttribute("clientName").toString();  
  87.         RemoteMessageConstant.getMappingList().remove(clientName);// 从关系Map中,删除对应关系。  
  88.         RemoteMessageConstant.getMapList().remove(clientName);// 从用户Map中,删除该用户;  
  89.         RemoteMessageConstant.getUserNamList().remove(clientName);//从用户名列表 删除该用户名  
  90.         httpSession.removeAttribute("clientName");// 删除当前服务端的,客户ID  
  91.     }  
  92.   
  93.     /** 
  94.      * 调用页面JS 
  95.      * @param scriptSession,jsName:JS方法名,message:发送的信息 
  96.      */  
  97.     public void sendMessage(ScriptSession scriptSession, String jsName, String message) {  
  98.         ScriptBuffer script = new ScriptBuffer();  
  99.         script.appendCall(jsName, message);  
  100.         scriptSession.addScript(script);  
  101.     }  
  102.   
  103.     /** 
  104.      * get set 
  105.      */  
  106.   
  107.     public ScriptSession getScriptSession() {  
  108.   
  109.         return WebContextFactory.get().getScriptSession();  
  110.     }  
  111.   
  112.     public HttpSession getHttpSession() {  
  113.   
  114.         return WebContextFactory.get().getSession();  
  115.     }  
  116.   
  117. }  



RemoteMessageClient  客户端 

Java代码  收藏代码
  1. package com.gw.medical.hospital.utils.dwr;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.Iterator;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpSession;  
  8.   
  9. import org.directwebremoting.Browser;  
  10. import org.directwebremoting.ScriptBuffer;  
  11. import org.directwebremoting.ScriptSession;  
  12. import org.directwebremoting.ScriptSessionFilter;  
  13. import org.directwebremoting.WebContextFactory;  
  14. import org.directwebremoting.annotations.RemoteMethod;  
  15. import org.directwebremoting.annotations.RemoteProxy;  
  16.   
  17. @RemoteProxy(name = "RemoteMessageClient")  
  18. public class RemoteMessageClient {  
  19.   
  20.     /** 
  21.      * 客户端初始化 
  22.      */  
  23.     @RemoteMethod  
  24.     public void onPageLoadClient() {  
  25.         ScriptSession scriptSession = getScriptSession();  
  26.         HttpSession httpSession = getHttpSession();  
  27.         String clientName = scriptSession.getId();// 获取seciptSessionID作为clientName  
  28.         httpSession.setAttribute("clientName", clientName);  
  29.         RemoteMessageConstant.getMapList().put(clientName, scriptSession);// 存储用户信息到在线用户列表  
  30.         RemoteMessageConstant.getUserNamList().put(clientName, "游客");  
  31.         // 服务器显示在线用户列表;  
  32.         showOnlinClient();  
  33.         DwrScriptSessionManagerUtil dssm = new DwrScriptSessionManagerUtil();  
  34.         try {  
  35.             dssm.init();  
  36.         } catch (ServletException e) {  
  37.             e.printStackTrace();  
  38.         }  
  39.     }  
  40.   
  41.     /** 
  42.      * 客户端发送信息 
  43.      *  
  44.      * @param message 
  45.      */  
  46.     @RemoteMethod  
  47.     public void addMessageClient(String message) {  
  48.         HttpSession httpSession = getHttpSession();  
  49.         String clientName = httpSession.getAttribute("clientName") == null ? "" : httpSession.getAttribute("clientName").toString();// 获取当前登录客户端ID,在用户列表中查找相应客服  
  50.         String autoMessage = message;// 发送的内容  
  51.         ScriptSession scriptSession = RemoteMessageConstant.getMappingList().get(clientName);// 从对应Map中获取,当前客户端对应的服务端ScriptSession  
  52.   
  53.         if (scriptSession != null) {  
  54.             String clientMessage=RemoteMessageConstant.getUserNamList().get(clientName);  
  55.             clientMessage+=":"+autoMessage;  
  56.             sendMessage(scriptSession,"receiveMessages",clientMessage);  
  57.         }  
  58.     }  
  59.   
  60.     /** 
  61.      * 更改服务端在线用户列表 
  62.      */  
  63.     public void showOnlinClient() {  
  64.         Browser.withAllSessionsFiltered(new ScriptSessionFilter() {  
  65.             // 筛选scriptSession的用户,发送目标ID,是否在scriptSession中存在  
  66.             public boolean match(ScriptSession session) {  
  67.                 if (RemoteMessageConstant.getServerList().get(session.getId()) != null) {  
  68.                     return true;  
  69.                 } else {  
  70.                     return false;  
  71.                 }  
  72.             }  
  73.         }, new Runnable() {  
  74.             private ScriptBuffer script = new ScriptBuffer();  
  75.   
  76.             public void run() {  
  77.                 // 输出内容到页面  
  78.                 Iterator<String> it = RemoteMessageConstant.getMapList().keySet().iterator();  
  79.                 String autoMessage = new String();  
  80.                 while (it.hasNext()) {  
  81.                     String key = it.next().toString();  
  82.                     // 如果没有被分配客服,显示在等待列表中  
  83.                     if (RemoteMessageConstant.getMappingList().get(key) == null) {  
  84.   
  85.                         autoMessage += RemoteMessageConstant.getUserNamList().get(key) + ";";  
  86.                     }  
  87.                 }  
  88.                 script.appendCall("showOnlinClient", autoMessage);  
  89.                 Collection<ScriptSession> sessions = Browser.getTargetSessions();  
  90.                 for (ScriptSession scriptSession : sessions) {  
  91.                     scriptSession.addScript(script);  
  92.                 }  
  93.             }  
  94.         });  
  95.     }  
  96.   
  97.   
  98.     /** 
  99.      * get set 
  100.      */  
  101.     /** 
  102.      * 调用页面JS 
  103.      *  
  104.      * @param scriptSession 
  105.      *            ,jsName:JS方法名,message:发送的信息 
  106.      */  
  107.     public void sendMessage(ScriptSession scriptSession, String jsName, String message) {  
  108.         ScriptBuffer script = new ScriptBuffer();  
  109.         script.appendCall(jsName, message);  
  110.         scriptSession.addScript(script);  
  111.     }  
  112.   
  113.     public ScriptSession getScriptSession() {  
  114.   
  115.         return WebContextFactory.get().getScriptSession();  
  116.     }  
  117.   
  118.     public HttpSession getHttpSession() {  
  119.   
  120.         return WebContextFactory.get().getSession();  
  121.     }  
  122. }  




DwrScriptSessionManagerUtil 监听 

Java代码  收藏代码
  1. package com.gw.medical.hospital.utils.dwr;  
  2.   
  3. import javax.servlet.ServletException;  
  4.   
  5. import org.directwebremoting.Container;  
  6. import org.directwebremoting.ScriptBuffer;  
  7. import org.directwebremoting.ScriptSession;  
  8. import org.directwebremoting.ServerContextFactory;  
  9. import org.directwebremoting.event.ScriptSessionEvent;  
  10. import org.directwebremoting.event.ScriptSessionListener;  
  11. import org.directwebremoting.extend.ScriptSessionManager;  
  12. import org.directwebremoting.servlet.DwrServlet;  
  13.   
  14. public class DwrScriptSessionManagerUtil extends DwrServlet {  
  15.   
  16.     private static final long serialVersionUID = -7504612622407420071L;  
  17.   
  18.     public void init() throws ServletException {  
  19.         Container container = ServerContextFactory.get().getContainer();  
  20.         ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);  
  21.         ScriptSessionListener listener = new ScriptSessionListener() {  
  22.             public void sessionCreated(ScriptSessionEvent ev) {  
  23.   
  24.             }  
  25.   
  26.             public void sessionDestroyed(ScriptSessionEvent ev) {  
  27.                 if (RemoteMessageConstant.getMappingList().get(ev.getSession().getId()) != null) {  
  28.                     ScriptSession scriptSession = RemoteMessageConstant.getMappingList().get(ev.getSession().getId());  
  29.                     sendMessage(scriptSession,"receiveMessages","客户端已关闭!");  
  30.                 }  
  31.                 // 删除该用户的列表信息  
  32.                 RemoteMessageConstant.getMapList().remove(ev.getSession().getId());  
  33.                 RemoteMessageConstant.getMappingList().remove(ev.getSession().getId());  
  34.                 RemoteMessageConstant.getServerList().remove(ev.getSession().getId());  
  35.                 RemoteMessageConstant.getUserNamList().remove(ev.getSession().getId());  
  36.                 // 更新服务端在线列表  
  37.                 RemoteMessageClient rc = new RemoteMessageClient();  
  38.                 rc.showOnlinClient();  
  39.             }  
  40.         };  
  41.         manager.addScriptSessionListener(listener);  
  42.     }  
  43.     /** 
  44.      * 调用页面JS 
  45.      * @param scriptSession,jsName:JS方法名,message:发送的信息 
  46.      */  
  47.     public void sendMessage(ScriptSession scriptSession, String jsName, String message) {  
  48.         ScriptBuffer script = new ScriptBuffer();  
  49.         script.appendCall(jsName, message);  
  50.         scriptSession.addScript(script);  
  51.     }  
  52. }  



RemoteMessageConstant 静态常量 

Java代码  收藏代码
  1. package com.gw.medical.hospital.utils.dwr;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import org.directwebremoting.ScriptSession;  
  7.   
  8. public class RemoteMessageConstant {  
  9.     private static Map<String, ScriptSession> mapList = new HashMap<String, ScriptSession>();// 在线用户,Key为在线用户,Value为对应的客服,如果为空表示当前无客服接入;用户等待列表  
  10.     private static Map<String, String> userNamList = new HashMap<String, String>();// 在线用户名称  
  11.     private static Map<String, ScriptSession> mappingList = new HashMap<String, ScriptSession>();// 对应关系Map  
  12.     private static Map<String, ScriptSession> serverList = new HashMap<String, ScriptSession>();// 服务端在线列表  
  13.   
  14.     /** 
  15.      * get set 
  16.      */  
  17.     public static Map<String, ScriptSession> getMapList() {  
  18.         return mapList;  
  19.     }  
  20.   
  21.     public static void setMapList(Map<String, ScriptSession> mapList) {  
  22.         RemoteMessageConstant.mapList = mapList;  
  23.     }  
  24.   
  25.     public static Map<String, ScriptSession> getMappingList() {  
  26.         return mappingList;  
  27.     }  
  28.   
  29.     public static void setMappingList(Map<String, ScriptSession> mappingList) {  
  30.         RemoteMessageConstant.mappingList = mappingList;  
  31.     }  
  32.   
  33.     public static Map<String, ScriptSession> getServerList() {  
  34.         return serverList;  
  35.     }  
  36.   
  37.     public static void setServerList(Map<String, ScriptSession> serverList) {  
  38.         RemoteMessageConstant.serverList = serverList;  
  39.     }  
  40.   
  41.     public static Map<String, String> getUserNamList() {  
  42.         return userNamList;  
  43.     }  
  44.   
  45.     public static void setUserNamList(Map<String, String> userNamList) {  
  46.         RemoteMessageConstant.userNamList = userNamList;  
  47.     }  
  48.   
  49.   
  50. }  



serverMessage.jsp  客服页 

Java代码  收藏代码
  1. <%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>  
  2. <!DOCTYPE html >  
  3. <html>  
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  6. <title>Server</title>  
  7. <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/themes/default/easyui.css">  
  8. <script type="text/javascript" src="<%=request.getContextPath()%>/dwr/engine.js"> </script>  
  9. <script type='text/javascript' src='<%=request.getContextPath()%>/dwr/util.js'></script>  
  10. <script type="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/RemoteMessageServer.js"> </script>  
  11. <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-1.8.3.min.js"> </script>  
  12. <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.easyui.min.js"> </script>  
  13. <script type="text/javascript">  
  14.     $(function(){  
  15.         dwr.engine.setActiveReverseAjax(true);  
  16.         dwr.engine.setNotifyServerOnPageUnload(true);  
  17.         onPageLoad();  
  18.         //对话框初始化  
  19.         $("#messageDialog").dialog({  
  20.             title:'对话框',  
  21.             width:600,  
  22.             height:550,  
  23.             closed:false,  
  24.             cache:false  
  25.         });  
  26.     });  
  27.       function sendMessage(message) {  
  28.             // 通过代理调用后台的addMessage方法发送消息  
  29.             RemoteMessageServer.addMessage(message);  
  30.     }  
  31.     // 前台接受消息的方法,由后台调用   
  32.       function receiveMessages(messages) {  
  33.             var p=$("  
  34. ");  
  35.             $(p).append(messages);  
  36.             $("#messageContent").append(p);  
  37.       }  
  38.         
  39.       //读取name值作为推送的唯一标示  
  40.       function onPageLoad(){  
  41.         // 通过代理,传入区别本页面的唯一标识符  
  42.         RemoteMessageServer.onPageLoad();  
  43.        }  
  44.        function selectClient(){  
  45.            RemoteMessageServer.selectClient({  
  46.                callback:function(clientName) {   
  47.                   if(clientName=="")  
  48.                       alert("选择失败!")  
  49.                   else  
  50.                      $("#messageContent").append("客户:"+clientName+",已成功接入!"+"<br/>");  
  51.                      $("#messageDialog").dialog({title:'客户:'+clientName});  
  52.                }  
  53.                  
  54.            });  
  55.        }  
  56.        function showOnlinClient(str){  
  57.            $(".onlineUser").html(str);  
  58.        }  
  59.         /** 
  60.      * 页面JS 
  61.      */  
  62.      function showIcon(){  
  63.         if($("#icondiv").css("display")=="none"){  
  64.             $("#icondiv").css("display","block");  
  65.         }else{  
  66.             $("#icondiv").css("display","none");  
  67.         }  
  68.      }  
  69.      function addIcon(str){  
  70.          var img=$('<img src="<%=request.getContextPath()%>/images/dwr/'+str+'.gif"/>');  
  71.          $("#messageTextArea").append($(img));  
  72.      }  
  73.      function jsSendMessage(){  
  74.          var message=$("#messageTextArea").html();  
  75.          $("#messageContent").append("我:"+message+"<br/>");  
  76.          $("#messageTextArea").html("");  
  77.          this.sendMessage(message);  
  78.      }  
  79.           
  80. </script>  
  81. <style type="text/css">  
  82.     #icondiv ul{  
  83.         width: 400px;   
  84.         height: 130px;  
  85.         overflow: auto;  
  86.         border: 1px solid black;  
  87.     }  
  88.     #icondiv ul li{  
  89.         float: left;  
  90.         width: 45px;  
  91.         list-style: none;  
  92.           
  93.     }  
  94.     #icondiv ul li img{  
  95.         width: 40px;  
  96.         height: 40px;  
  97.     }  
  98. </style>  
  99. </head>  
  100. <body>  
  101.     [align=center;]  
  102.             [url=javascript:void(0)]发送[/url]  
  103.             [/align]  
  104.         </div>  
  105.     </div>  
  106.     <div><input type="button" onclick="selectClient()" value="selectClient"/></div>  
  107.     [align=center;]  
  108.             [url=javascript:void(0)]发送[/url]  
  109.             [/align]  
  110.         </div>  
  111.     </div>  
  112. </body>  
  113. </html>  
分享到:
评论

相关推荐

    dwr消息推送示例代码

    DWR(Direct Web Remoting)是一种Java技术,它允许...通过理解以上知识点,你可以有效地使用DWR实现从服务器向浏览器的消息推送功能。这个示例代码可以帮助你快速上手,同时,你可以根据实际需求对其进行调整和优化。

    ajax框架:dwr》实战(包括整合).pdf

    - **DWR 组件**:主要包括 Client、Proxy、Servlet 和 Server 等几个部分。 - **数据类型转换**:DWR 如何处理不同数据类型之间的转换,包括基本类型、复杂类型以及自定义类型。 - **DWRSERVLET 配置**:详细解释...

    SD大会精品讲座:利用AJAX/Java 技术建立高流量的即时双向沟通网站

    - **Comet**:一种实现Server Push的技术,通过对HTTP连接的长期保持来实现服务器向客户端推送数据。 - **WebSocket**:提供了全双工的通信通道,可以实现客户端和服务器之间的双向通信。 #### 六、应用实例 - ...

    J2EE武功秘籍

    - **点对点 (Point-to-Point)**:发送者发送消息到队列,消费者从队列消费消息。 - **发布订阅 (Publish/Subscribe)**:发送者发送消息到主题,多个订阅者订阅同一主题接收消息。 **5. Cookie 和 Session 区别** -...

    Delphi 12.3控件之数据库开发基础课程SQL学习01-认识Navicat SQL工具,创建数据库和表.rar

    Delphi 12.3控件之数据库开发基础课程SQL学习01-认识Navicat SQL工具,创建数据库和表.rar

    基于java的ssm教学质量评价系统(含LW+PPT+源码+系统演示视频+安装说明).7z

    本教学质量评价系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 通过标签分类管理等方式,实现管理员;个人中心、公告信息管理、学院管理、学生管理、教师管理、督导管理、教师信息管理、学生评教管理、督导评教管理,学生;个人中心、公告信息管理、教师信息管理、学生评教管理,督导;公告信息管理、教师信息管理、督导评教管理,教师;个人中心、公告信息管理、教师信息管理、学生评教管理、督导评教管理等信息管理功能,从而达到对教学质量评价系统信息的高效管理。 关键词:教学质量评价系统 ,JSP技术,Mysql数据库

    springboot社区养老服务系统设计与实现(代码+数据库+LW)

    摘  要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此社区养老服务系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。社区养老服务系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,服务种类管理,社区服务管理,服务预约管理,物品种类管理,物品信息管理,借用信息管理,归还信息管理,活动分离管理,社区活动管理,活动报名管理,疫情监控管理,物业收费管理,资讯中心管理,意见中心管理,系统管理。用户可以注册登录,查看管理员发布的各中心信息,可以服务预约,借用归还,活动报名,发布自己的疫情监控信息,查看物业收费等操作。社区养老服务系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为

    南京林业大学毕业设计(论文)规范解读及应用指南

    内容概要:本文档详细阐述了南京林业大学本科毕业设计(论文)的具体撰写规范和要求,旨在确保毕业生能够提交高质量的设计(论文)。主要内容涵盖了从标题到附录的所有部分的撰写要求和格式标准,强调毕业设计(论文)不仅检验学生的学术能力,也是教学质量的关键指标。文中详细描述了每个组成部分的内容要求和书写格式,如标题、摘要、正文、结论、参考文献及附录的具体规定,并提供了具体的标准和操作流程。同时,针对不同类型的专业和学科提出了不同的撰写细则,确保规范适应广泛的学术背景和研究主题。 适合人群:即将进行本科毕业设计(论文)撰写的南京林业大学在校生及其指导教师。 使用场景及目标:① 帮助学生熟悉并掌握毕业设计(论文)的各项要求,从而确保顺利完成学业要求;② 教师利用该规范来审核和指导学生的工作。 阅读建议:该文档条理清晰,分类细致,因此读者应按步骤逐步理解和实践每一部分内容的要求和规范。同时,注意不同专业对于篇幅、内容重点等方面可能存在的特定调整。此外,对于涉及具体的排版和技术术语部分,建议配合实际案例进行练习。

    电子与机器人工程领域的计算机视觉视频稳定化技术实现与评估作业指导(2024-2025)(可复现,有问题请联系博主)

    内容概要:本作业指导书详细介绍了面向电气与机器人工程专业的计算机视觉模块课程(EL3105),旨在让学生深入理解和实现实时视频稳定化技术,特别是针对相机抖动补偿的方法。学生需要撰写报告并实现算法,解释选择的视频稳定方法以及具体的软件实现步骤。报告应涵盖背景介绍、解决方案详述、实验过程及其结论。提供的两个预录制视频将作为学生练习的数据集来测试视频稳定性。此外,学生需保证提交材料为原创,未使用任何AI工具辅助。 适合人群:适用于电气与机器人专业本科与研究生级别的学生,在掌握了基本图像特征提取匹配的基础上进一步探索高级应用技能。 使用场景及目标:帮助学员掌握关键点检测、稳健匹配、运动估计等基础知识的应用能力,同时培养他们独立解决实际问题的能力和编程技巧,特别是在视频序列处理方面。 其他说明:评估日期明确为2024年春季学期初开始,并于三月底截止。成绩构成包括对采用方法合理性阐述占30%,具体编码执行效果占40%,最后还有15%取决于成果评价,剩下则是对于报告形式的要求如语言表述规范性和引用文献准确性方面的情况打分。所有提交均在线进行并且需要符合特定格式要求。

    Delphi 12.3控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (September 24, 2024).rar

    Delphi 12.3控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (September 24, 2024).rar

    蚂蚁金服从云到端一站式解决方案-移动开发平台mPaaS V1.1.34产品介绍

    内容概要:本文档详细介绍了蚂蚁金服移动开发平台(mPaaS)及其各个核心子组件的构成和优势,涵盖移动网关(MGS)、移动推送(MPS)、移动分析(MAS)、移动同步(MSS)、实时发布(MDS)以及智能投放(MCDP)。各组件在提供基础能力的前提下分别具有不同特点。移动开发平台致力于为企业提供高可用、高效、稳定的一站式解决方案,并在架构、安全、灵活性等方面有着独特之处。 适用人群:移动应用开发商、产品经理、运维和技术专家、项目管理者以及其他相关人员。 使用场景及目标:通过提供一站式的移动开发方案,帮助企业更好地开发、管理和运维移动应用,降低技术门槛和发展成本,促进应用创新与发展。各组件具体应用于移动应用开发过程的不同环节中: 1. 开放移动服务能力:MGS用于建立统一的通信接口,简化移动端与服务端对接; 2. 移动信息即时触达:MPS用于实现移动推送,提供个性化消息通知; 3. 应用数据采集与分析:MAS用于大规模移动数据分析,辅助决策; 4. 数据增量推送及更新同步:MSS用于保证业务信息同步; 5. 提供高效的版本管理:MDS用于应用实时部署; 6. 支持灵活精准的投放运营:M

    基于java的ssm个人交友网站(含LW+PPT+源码+系统演示视频+安装说明).7z

    个人交友网站的主要使用者分为管理员和用户,实现功能包括管理员:个人中心、用户管理、交友信息管理、线下活动管理、活动报名管理、系统公告管理、论坛交流、系统管理,用户:个人中心、交友信息管理、活动报名管理、我的收藏管理,前台首页;首页、交友信息、线下活动、系统公告、论坛信息、我的、跳转到后台、客服等功能。由于本网站的功能模块设计比较全面,所以使得整个个人交友网站信息管理的过程得以实现。 本系统的使用可以实现本个人交友网站管理的信息化,可以方便管理员进行更加方便快捷的管理。 关键词:个人交友网站;JSP技术;MYSQL数据库;

    自动鱼计数器,全球前12强生产商排名及市场份额

    自动鱼类计数器是一种用于精确计算通过特定区域(如鱼梯或鱼道)的鱼类数量的装置。这些设备使用传感器、摄像头或声波信号等各种技术,在鱼群游过时对其进行检测和计数。这些信息对于监测鱼类种群、评估洄游模式以及评估鱼类通道结构的有效性非常重要。自动鱼类计数器有助于研究人员和渔业管理人员就鱼类物种的保护和管理工作做出明智的决策。 据QYResearch调研团队最新报告“全球自动鱼计数器市场报告2024-2030”显示,预计2030年全球自动鱼计数器市场规模将达到0.6亿美元,未来几年年复合增长率CAGR为4.9%。 根据QYResearch头部企业研究中心调研,全球范围内自动鱼计数器生产商主要包括Vaki (MSD Animal Health )、Flatsetsund Engineering AS、Calitri Technology、AGK Kronawitter GmbH、Faivre、Fischtechnik International、Guangzhou Yuandian Intelligent Technology Co、Aquascan、Fu-Chen Auto Technology

    cef109.1.11+chromium 109.0.5414.120

    最后一个win7稳定运行版本,支持视频和pdf查看,因为之前下载的别人打包好的文件,可以播放视频,但是打开pdf会闪退,所以自己编译了一个,有需要的可以试试

    C# 打印模板,打印设计检测报告

    C# 打印模板,打印设计检测报告

    基于java的ssm医院预约挂号系统(含LW+PPT+源码+系统演示视频+安装说明).7z

    本医院预约挂号系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 关键词:医院预约挂号系统 ,JSP技术,Mysql数据库 通过标签分类管理等方式,实现管理员;个人中心、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、挂号预约管理、问题反馈管理、问题解答管理、系统管理,用户;个人中心、挂号预约管理、问题反馈管理、问题解答管理、我的收藏管理、医生;个人中心、出诊信息管理、挂号预约管理、问题反馈管理、问题解答管理,前台首页;首页、科室信息、出诊信息、公告信息、我的、跳转到后台等信息管理功能,从而达到对医院预约挂号系统信息的高效管理。

    2025年3月CCF编程能力认证(C++)五级.pdf

    2025年3月CCF编程能力认证(C++)五级.pdf

    基于计算机视觉手势识别控制系统YoLoGesture 利用YOLO实现利用yolo进行手势识别的控制系统最后利用str.zip

    yolo

    轻量级可扩展网址导航系统V2.45完美去授权版

    轻量级可扩展网址导航系统V2.45完美去授权版 系统亮点 1、采用光年全新v5模板开发后台 2、后台内置8款主题色,分别是简约白、炫光绿、渐变紫、活力橙、少女粉、少女紫、科幻蓝、护眼黑 3、可管理无数引导页主题并且主题内可以进行不同的自定义设置,目前内置16套主题 持续增加中… 4、可单独开发各种插件,插件可进行自定义设置,目前内置七款实用插件 5、无需安装解压部署即可使用 6、数据管理包采用易航原创JsonDb数据包 7、主题内置神奇的$this语法 可快速开发并保留著作版权 8、对前台URL进行伪静态重写 对搜索引擎更加友好 9、内置硬防洪和硬防墙插件 告别域名忧虑 10、系统全开源 告别后门风险

    277.基于51单片机的电压比较器【点阵,数码管,串口】(仿真).pdf

    277.基于51单片机的电压比较器【点阵,数码管,串口】(仿真).pdf

Global site tag (gtag.js) - Google Analytics