需求场景:
当用户浏览一个网页,看到自己喜欢的视频信息时,就点击改视频信息链接,在线观看视频.如果该用户本机没有安装完整版的暴风影音,网页通过JS脚本判定后,自动为用户提供一个下载连接安装暴风MINI版,用户点击安装后,再次点击刚才网页中的视频信息,暴风影音MINI版播放该视频信息.暴风影音MINI版的调起入口来源主要是网页上的视频连接,很多用户没有安装暴风影音MINI版,为了更好的提高用户感受,降低用户的操作环节,产品人员不希望用户安装完成后,还需要再次点击刚才点击的视频,这种衰减可能会直接导致暴风影音MINI版的报活和VV打折扣.
实现思路:
1)用户点击视频链接后,在某个地方记录点击的视频信息.
记录视频信息有多种方式,但此时还没有客户端存在,所以只能考虑存放在指定的服务器上,或者存放在浏览器的Cookie,flash的共享对象,或者是下载安装包的URL中(由安装脚本负责解析并保存在本地某个文件中).
2)客户端安装完成后,首次启动时去预订地点读取视频信息并播放.
客户端安装完成后,可以通过cookie中标识,读取远程服务器的信息,也可以读取用户系统中的目录(包括IE存放cookie的目录).
方案对比:
其实每个方案都能实现这个需求,只不过每个方案都会有缺点,如何扬长避短才是最重要的.目前没有任何一个方案是完美的.
方案1:
通过记录Cookie的方式将用户点击触发的视频信息保存到本地,客户端安装后通过查找本地cookie调起播放。
缺点:
目前客户端读取WIN7,vista系统的IE cookie有困难,不容易实现。
由于各家合作网站的不同,客户端需要知道那些网站的域名,才能查找cookie,适用于点击后页面跳转到暴风主站的方式。(适用面不是很广)
方案2:
通过修改文件名称的方式,将播放视频的ID写入待安装的MINI暴风名称中,例如:http://*****/storm_13000004455.exe的方式。
缺点:
由于点击后知晓用户点击的那个视频,所以需要动态脚本解析这个ID,并将动态生成下载EXE的软连接,所以就要求下载服务由一台动态服务器提供,就不能使用现在的下载服务集群。
如果采用天津双线的机房作下载,带宽费用较高,南北部署服务器需要新申请服务。
由于原有逻辑中需要将暴风安装包通过软连接的方式进行报数的统计,目前的格式为storm_13.exe,所以格式上会有些冲突,需要调节整个数据统计的服务代码(有些研发成本)。
方案3:
通过flash共享对象的方式,通过flash的方式将播放视频的信息写入共享对象,mini暴风安装后调起通过读取共享对象已存在视频信息并播放视频,读取后直接删除该共享对象中的视频信息。由于使用非客户端开发,代码扩展性比较容易。
缺点:
合作模式不单一,需要合作网站同意载入flash,提高了对外合作的难度。
每次启动暴风后,都会调起flash尝试读取共享对象(目前的后播推荐也是使用flash,如果有播放前启动flash的时机,如:"广告,推荐",就可以使用这个方案了)
方案4:
通过session的方式,用户点击后,访问制定域名的一个URL,并提交点击的影视信息ID,服务器动态生成一个sessionID,并保存这个sessionID对应的影视信息ID,客户端安装完毕后首次启动时访问指定的服务,由于域名相同,请求是会附带刚才请求的sessionID,服务段判定后将刚才保存的影视信息ID返回给客户端,客户端播放。
缺点:
使用sessionID进行识别和保存有时间控制,一般是设定在15分钟左右,对于长时间点击后,不安装会有超期和实效的现象。
由于sessionID需要每次动态生成,并保存影视信息,不能承载太大的并发访问请求。
最终方案的选择,我的个人建议是第四种,相对成本低,扩展性高,客户端不用特别大的改动.不过,每个方案都是建议,因为最终的选择权是带这个项目的技术leader,由他们去决定好了.
分享到:
相关推荐
服务器使用`CServerSocket`监听端口,一旦有客户端连接,就会创建一个新的`CSocket`实例与之交互。客户端则使用`CClientSocket`建立与服务器的连接。 3. **消息传递**:聊天应用的核心是消息的发送和接收。在MFC中...
客户端通过网络连接与服务器交互,接收服务器返回的数据并展示给用户,同时将用户的操作转化为对服务器的请求。客户端设计需考虑用户体验,如响应速度、界面美观、操作流畅等,以提高用户的满意度。 三、数据库管理...
总结来说,这个手机网络游戏javame项目源码提供了一个学习和实践移动网络游戏中客户端与服务器端交互的好机会。通过对"xiangqi"和"XiangQiServer"这两个文件的深入剖析,我们可以掌握javame游戏开发的基本流程,了解...
《CrichEditCtrl在聊天客户端中的应用》 CrichEditCtrl是Microsoft MFC库中一个强大的文本...通过深入理解和巧妙运用CrichEditCtrl的各种特性,开发者可以打造出既实用又富有个性化的聊天工具,满足现代用户的需求。
客户端则负责与服务器交互,获取必要的信息以完成打洞过程。 以下是关于UDP打洞技术的一些关键知识点: 1. **NAT类型识别**:在打洞之前,客户端需要识别自身的NAT类型,如Full Cone NAT、Restricted Cone NAT、...
这不仅能够充分利用两者的优势,还能创造出更具吸引力和交互性的Web应用程序,提高用户的满意度和参与度。因此,对于IT开发者来说,深入研究这一主题,将是提升自身技能和项目成功率的重要途径。
其客户端与服务端的高效交互、热更新技术的应用、状态帧同步战斗系统的实现以及行为树技能系统的设计,都体现了开发者对游戏性能和用户体验的重视。这个开源项目不仅为游戏爱好者提供了学习和实践的平台,也为业界...
4. **优化界面交互**:使用JavaScript和CSS改进用户界面的交互,如添加动态效果、提高响应速度、优化滚动行为等。 5. **减少HTTP请求**:合并CSS和JavaScript文件,减少HTTP请求次数,提高页面加载速度。 6. **...
6. **本地存储**:为了离线访问和数据持久化,客户端可能利用浏览器的localStorage或IndexedDB来存储用户数据和聊天记录。 7. **通知系统**:桌面客户端应有有效的通知机制,比如使用系统级的通知服务,确保用户...
2. Client模块:包含HTML、CSS和JavaScript文件,构建了用户界面和WebSocket客户端逻辑,负责与服务器交互并渲染游戏画面。 3. Protocol模块:定义了游戏消息的数据结构和编码规则,确保客户端和服务器之间的消息...
1. **数据结构**: Redis支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据结构设计巧妙,适合处理各种复杂的数据操作需求。 2. **内存存储...
《Delphi6构建的局域网即时聊天工具详解》 ...从客户端的用户交互到服务器的数据广播,每一环节都体现了编程设计的巧妙和实用性。对于学习Delphi或网络编程的人来说,这是一个值得研究的优秀案例。
这样,客户端无需直接访问数据库,而是通过RMI调用服务器端的服务,降低了网络通信的复杂性,提高了系统的可扩展性和安全性。 项目"SongService-master"可能包含了源代码、配置文件和其他资源,这为开发者提供了...
WebView不仅支持HTML、CSS和JavaScript,还能实现与原生Android代码的交互,比如通过JavaScript接口调用Android方法,实现分享、评论等操作。开发者需要注意合理设置WebView的缓存策略,以提高加载速度和用户体验。 ...
该资源包含服务端和客户端两部分,实现了一个简单的猜谜游戏,玩家通过客户端与服务器进行交互,猜测正确的答案以赢得游戏。项目中还巧妙地引入了计分机制,使用ConcurrentHashMap实时保存所有客户的得分信息,增加...
"ReadhubAndroid客户端"项目,作为一款完整App的实例,为我们展示了如何巧妙地运用MVP架构模式、RxJava响应式编程库以及Retrofit网络请求库,实现应用的高效运行和良好设计。下面将深入探讨这些技术的核心概念和实际...
在PyRat中,这一特性被巧妙地应用到了客户端和服务端之间,允许用户远程执行服务端的命令和管理服务端的资源。 PyRat项目的核心概念分为两部分:客户端(Client)和服务器端(Server,也称为控制端)。客户端是发起...
总之,利用C#的TabControl控件,通过自定义外观、动态加载内容、实现交互功能、合理布局、添加动画效果以及使用图标和图像,我们可以创建一个具有微博客户端风格的用户界面。虽然这个过程需要一定的编程技巧和UI设计...
同时,多线程技术也被用于并发处理多个客户端连接,使得服务器可以同时处理多个用户的请求,提高系统性能和响应速度。 文件名"Chat"可能表示的是项目的主入口点或者核心类,负责初始化服务器,处理客户端连接,以及...
GitChat巧妙地将Git的特性融入到聊天应用中,让用户在交互过程中可以记录、回溯和协作。这不仅提供了数据的安全性,还使得对话历史可追踪,方便团队合作。 1. **基于Git的数据存储**: - GitChat将每条消息视为一...