FlashCom程序设计读书笔记(一)

2006-03-09 00:17:15

第一部分:FlashCom基础 第一章:Flash Communication Server介绍 1.1客户端和服务器 FlashCom是安装在主机上的服务应用程序就像是web服务器,但又和web服务器有很大的不同.FlashCom和Flash客户端点建立的是持久的连接.每一个Flash客户端都可以和其他的客户端共享数据,这点是通过Macromedia的Real-Time Messaging Protocol(RTMP)协议来实现的. Flash 影片提供用户界面,并和FlashCom服务器建立连接.一旦连接被建立,Flash影片就可以和服务器通信,并且可以和连接到此服务器的其他客户端通信.一个Flash影片可以发布音频和视频流到服务器,连接到此服务器的其他客户端就可以播放这些实时的流,也可以播放服务器上事先保存好的非实时的文件流.一个客户端发布一个实时的流到FlashCom服务器,所以其他的连接的客户端就可以接受到这个流.一旦流到达了服务器,FlashCom服务器会复制这个流,并把流发送到其他的客户端. 1.2 Real-Time Messaging 协议 Flash Player和FlashCom通过Macromedia的Real-Time Messaging(RTMP)协议进行通信.RTMP使用的是TCP协议在Flash Player和FlashCom服务器间传递数据包,这保证了数据传输的可靠性.RTMP可以传输MP3和Nellymoser编码格式的音频.数据传输使用的是Mecromedia的Action Message Format(AMF)协议. 1.3 连接到服务器 NetConnection类连接客户端到一个服务器实例. nc = new NetConnection(); nc.connect("rtmp://echo.ryerson.ca/campusCameras/connector"); 为了判断连接是否成功,可以在NetConnection实例对象上定义一个onStatus()方法,为了保证信息被正确接受,这个方法需要定义在调用connect方法之前. nc = new NetConnection(); nc.onStatus = function(info) { trace("The connection code is: " + info.code); } nc.connect("rtmp://echo.ryerson.ca/campusCameras/connector"); 1.4音频,视频,ActionScript数据 一旦建立好了连接,就可以发送或者接收包含音频或者视频的流.如接受播放一个流: in_ns = new NetStream(nc); videoArea.attachVideo(in_ns); in_ns.play("public/Ryerson_High_Speed"); 发布一个流: out_ns = new NetStream(nc); out_ns = attachAudio(Microphone.get()); out_ns = attachVideo(Camera.get()); out_ns.publish(userName); 你可以在一个NetConnection连接中创建多个流对象(NetStream对象) 1.5实时的共享数据 ShareObject分为两种: 1.LocalSharedObject 本地sharedobject 2.RemoteSharedObject 远程sharedobject FlashCom可以利用远程sharedobject和不同的客户端之间共享数据,如果一个客户端影片更新了一个远程的sharedobject的属性,其他连接客户端的也会被更新. 使用SharedObject基本分为四步: 1. 使用SharedObject.getRemote()获得一个远程sharedobject对象. 2. 根据程序设置sharedobject 3. 连接到sharedobject 4. 一旦连接上,必要是更新sharedobject的属性 users_so = SharedObject.getRemote("users", nc.uri); users_so.onSync = function(infoList) { for(var i in infoList) { switch(info.code) { case "change": var id = info.name; trace("User connected with id: " + id); trace("and name: " + users_so.data[id]); break; case "delete": var id = info.name; trace("User disconnected with id: " + id); break; } } } 1.6远程方法 一个应用程序的实例可以使用Client.call()调用一个客户端的方法.一个客户端可以使用NetConnection.call()调用一个应用程序实例的方法,例如,一个服务器端的教本可以调用调用一个客户端方法让它了解自己的ID号 client.call("setID", null, id); 客户端必须在NetConnection对象上定义此方法才能生效如: nc = new NetConnection(); nc.setID = function(id) { myID = id; } 反之,客户端也可以调用服务器端的方法.