websocket----几个要记住的定义:1.双向长连接,不受平台限制 2.websocket发送数据的格式一般为二进制和字符串 3.websocket的链接是异步的
步骤:
1.建立连接,上代码:
private function initSocket():void
{
socket = new Socket(null,null,ByteArray);
socket.on(Event.OPEN,this,connectHandler); //连接正常打开抛出的事件
socket.on(Event.MESSAGE,this,dataHandler);//接收到消息抛出的事件
socket.on(Event.CLOSE,this,closeHandler);//socket关闭抛出的事件
socket.on(Event.ERROR,this,catchError);//连接出错抛出的事件
}
这里四个事件肯定要记住的
public function connect(host:String = null, port:int=0):void
{
var url:String = "ws://" + host + ":" + port;
socket.connectByUrl(url);
}
连接成功:
private function connectHandler():void
{
//连接成功后的处理,一般是启动心跳包
heart()
}
public function Heart():void
{
send();
}
接受消息:收到消息首先要进行解密处理(加密解密这块在别的地方再记录一下)
问题:1.如何判断当前返回的消息是否是最后一条消息?
2.如何判断这条消息是心跳包返回的消息还是请求返回的消息?
答:1.在发送协议的时候,记录下这次发送协议的id,当服务器发送过来的时候也会有个id,通过比对id是否相同可以知道是否是最后一个消息
2.同样给心跳包定个id不就行了么
关于apply()和call(),以前不知道还有这个东西存在,现在边学边记录
这两兄弟应该是为了解决上下文环境(执行域)
比如:这例子虽然是抄来的,but,抄来的现在就是我的了!
这是一个张三对象的一个加薪的方法:
public function addSalary(value:uint):void
现在给张三加薪:
张三.addSalary(10000);
那么现在给李四加薪,咋办呢?李四没有加薪这个对象的方法张三.addSalary.call(李四, 20000);
apply()和call()方法类似(目前先理解到这),第二个参数不一样,apply()第二个参数是数组。对第一个参数的理解:一般情况下用apply()的时候,都不是在本类调用的,那么第一个参数可以指需要调用的对象,如果设置为null的话,则是全局global