客户端如何与服务端之间建立连接上次已经说了。今天主要说说客户端如何与服务端通信的。简单的说就是用使用什么方法,怎么处理。
先说客户端呼叫服务端。如果不使用共享对象,客户端呼叫服务端,就一个方法:call。call方法里边,第一个参数是服务端的方法名字,第二个参数是Responder对象(可以为空,就不需要返回了),后边的参数是任意的。可以带数值类型,object,array都可以。如:
var songName:String = "痛彻心扉"; var obj:Object = {nickName:"vini",age:28}; var arr:Array = [1985,10,24]; nc.call("iWantSing",null,songName,obj,arr);
服务端的方法:
Client.prototype.iWantSing = function (songName,obj,arr) { application.broadcastMsg("heWantSing",songName,obj.nickName); this.call("youHasTell",null); }
服务端的被呼叫端方法这样定义:Client.prototype.functionName = function (){}. 在该方法内定义的this,指的就是Client,这个是as2的写法。
再说服务端呼叫客户端。服务器呼叫客户端比客户端呼叫服务端多一个方法,就是广播:broadcastMsg.广播,是可以将消息发给同一个连接的所有的客户端。服务端,还可以通过call来呼叫客户端。使用方法和客户端呼叫服务端的方法一样。上边都已经写到了。这里再明确一点。服务端呼叫客户端是Client来call。这个Client怎么来。一个是客户端呼叫的方法中,this指向的就是Client。Client还有一个来源,就是服务端参数自己带的。如:
application.onDisconnect = function(client) { }
Client还有一个来源,那就是application的一个属性clients,它包裹链接服务器的所有Client。如何明确哪一个呢,在建立链接的时候,你可以去给Client定义属性。如name属性。
application.onConnect = function(client,userName) { var len = application.clients.length; var time = application.getNowTime(); var i = 0; for( i = 0 ; i< len ; i++) { if(application.clients[i].name == userName) { application.broadcastMsg("sameLogin",userName,time); application.disconnect(clients[i]); return; } } client.name = userName; //这里很重要,将用户名赋值给client对象。 userList.push(userName); application.acceptConnection(client); //接受客户端的连接。 application.broadcastMsg("successLogin",userName,time); //广播一条消息出去。所有的客户端都会收到这个信息。这里带了一个参数,登陆客户的用户名 }
最后说说服务端调用服务端的方法:服务端调用服务端,用application关键字定义吧。如:
//获取服务器的时间 application.getNowTime = function () { var timedate = new Date(); var hours = timedate.getHours(); var minutes = timedate.getMinutes(); var seconds = timedate.getSeconds(); if(hours < 10) { hours = "0" + hours; } if(minutes < 10) { minutes = "0" + minutes; } if(seconds < 10) { seconds = "0" + seconds; } return hours+":"+minutes+":"+seconds; }
还有就是用prototype去创造。至于说用共享对象的通信,下次再做笔记吧。域名备案号,被注销了,弄一个多星期都访问不了域名。
P2P http://labs.adobe.com/technologies/cirrus/