校内网基于aflax的推技术简要分析
来源:互联网 发布:制作一元购物软件 编辑:程序博客网 时间:2024/04/28 10:13
这几天看很多人玩校内网的游戏,对其后台服务器推技术产生了巨大兴趣~于是抓代码研究,发现使用了 flash的xmlsocket与js结合的方法。于是google一下。找到了www.aflax.org,大体架构如下(仅仅推技术层面,其他架构不予考虑):
aflax会构建一个aflax.swf,然后由aflax.js 控制aflax.swf 建立xmlsocket通道。数据的接受由服务器从xmlsocket推向swf。而swf收到后,跟aflax.js通信处理。
研究一个简单的chat例子吧,这是官网提供的一个例子,我们慢慢研究
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
- 2 <html>
- 3 <head>
- 4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- 5 <title>AFLAX: A JavaScript Library for Macromedia's Flash™ Platform</title>
- 6
- 7 <LINK href='../../include/style.css' type='text/css' rel='stylesheet'>
- 8 <script type="text/javascript" src="../../include/nifty.js"></script>
- 9 <script type="text/javascript" src="../../lib/AFLAX/aflax.js"></script>
- 10 <script type="text/javascript" src="../../lib/MochiKit/MochiKit.js"></script>
- 11
- 12 <script>
- 13 var aflax = new AFLAX("../../lib/AFLAX/aflax.swf");
- 14 var connection = null;
- 15 var username = "Unknown";
- 16 var firstLine = true;
- 17
- 18 function go()
- 19 {
- 20 }
- 21
- 22 function onConnectEvent(val)
- 23 {
- 24 if(val)
- 25 appendData("Connection successful.");
- 26 else
- 27 appendData("Could not make connection to server.");
- 28 }
- 29
- 30 function onDataEvent(str)
- 31 {
- 32 var i = str.indexOf(":");
- 33 var name = str.substring(0, i);
- 34 var rest = str.substring(i+1);
- 35 var color = "blue";
- 36 if(name == username) color = "red";
- 37 appendData("<font color='" + color + "'>" + name + ':</font> ' + rest);
- 38 }
- 39
- 40 function onCloseEvent()
- 41 {
- 42 appendData("Connection closed.");
- 43 }
- 44
- 45 function send(str)
- 46 {
- 47 connection.send(username + ': ' + str);
- 48 }
- 49
- 50 function showUI(name)
- 51 {
- 52 username = name;
- 53
- 54 var entry = document.getElementById("nameEntry");
- 55 entry.style.visibility = "hidden";
- 56 entry.style.display = "none";
- 57
- 58 var ui = document.getElementById("chatUI");
- 59 ui.style.visibility = "visible";
- 60 ui.style.display = "block";
- 61
- 62 connection = new AFLAX.Socket(aflax, "www.aflax.org", 7777,
- 63 "onConnectEvent", "onDataEvent", "onCloseEvent");
- 64 }
- 65
- 66 function appendData(str)
- 67 {
- 68 var chat = document.getElementById("chat");
- 69 chat.innerHTML += str + "<BR>";
- 70 chatchat.scrollTop = chat.scrollHeight - chat.clientHeight;
- 71 }
- 72
- 73 </script>
- 74
- 75 </head>
看13行, var aflax = new AFLAX("../../lib/AFLAX/aflax.swf"); 构建一个Aflax对象,传递了swf,
162 </p>
163
164 <script>
165 aflax.insertFlash(1,1, "#ffffff", "go", true);
166 </script>
167
168 <p>
在165行,因为是一个chat,并没有用swf,就只是把aflax偷偷的放进了</p>里,并且回调函数是go。
62行:
connection = new AFLAX.Socket(aflax, "www.aflax.org", 7777,
63 "onConnectEvent", "onDataEvent", "onCloseEvent");
建立了一个socket链接,自己看看js里面,实际上建立的是一个xmlsocket,还有三个回调函数,用于处理链接事件,收到数据事件,和关闭事件。
好了,我们来发一下信息
<input style="width:500px" onkeyup="if(event.keyCode == 13) { send(this.value); this.value=''; }">
function send(str)
46 {
47 connection.send(username + ': ' + str);
48 }
js会把信息控制swf发出去,然后,收到后:
function onDataEvent(str)
31 {
32 var i = str.indexOf(":");
33 var name = str.substring(0, i);
34 var rest = str.substring(i+1);
35 var color = "blue";
36 if(name == username) color = "red";
37 appendData("<font color='" + color + "'>" + name + ':</font> ' + rest);
38 }
回调函数调用了appendData
var chat = document.getElementById("chat");
69 chat.innerHTML += str + "<BR>";
70 chat.scrollTop = chat.scrollHeight - chat.clientHeight;
控件刷新一下页面就行了。这样一个chat就完成了。
自己写个xmlsocket测试一下吧,记得xmlsocket穿越不了防火墙和代理~
- 校内网基于aflax的推技术简要分析
- 转载 浅谈校内网的技术架构
- 校内的技术架构
- 校内网心理分析
- 基于Web的实验室管理系统技术简要报告
- 基于JOS 80x86 的堆栈切换简要分析
- QuestionAnsweringSystem技术实现简要分析
- QuestionAnsweringSystem技术实现简要分析
- 基于 HTTP 长连接的“服务器推”技术的比较
- 三种动态网页技术的简要分析
- 如何使用ASP.NET开发基于推技术的聊天室?
- Comet:基于 HTTP 长连接的“服务器推”技术
- Comet:基于 HTTP 长连接的“服务器推”技术
- [转]Comet:基于 HTTP 长连接的“服务器推”技术
- Comet:基于 HTTP 长连接的“服务器推”技术
- Comet:基于 HTTP 长连接的“服务器推”技术
- Comet:基于 HTTP 长连接的“服务器推”技术
- Comet:基于 HTTP 长连接的“服务器推”技术
- htons(), ntohl(), ntohs(),htons() 函数
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 中文版:Cocos2d iPhone基础教程
- web service 基础知识
- args.get_error的详细解释和在asp.net ajax中调用webservice遇到的问题
- 校内网基于aflax的推技术简要分析
- JsonCPP 使用
- Mysql数据库:java对象的存入和查询
- cocos 2d 主页
- 黑马程序员—Introspector内省
- Cocos2d开发系列(一)
- 十道海量数据处理面试题与十个方法大总结
- Cocos2d开发系列(二)
- hadoop学习步骤