nodejs的socket.io的广播机制是怎样的?

JavaScript018

nodejs的socket.io的广播机制是怎样的?,第1张

node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验,于是socket.io诞生。

socket.io设计的目标是支持任何的浏览器,任何Mobile设备。目前支持主流的PC浏览器 (IE,Safari,Chrome,Firefox,Opera等),Mobile浏览器(iphone Safari/ipad Safari/android WebKit/WebOS WebKit等)。socket.io基于node.js并简化了WebSocket API,统一了通信的API。它支持:WebSocket, Flash Socket, AJAX long-polling, AJAX multipart streaming, Forever IFrame, JSONP polling。

socket.io解决了实时的通信问题,并统一了服务端与客户端的编程方式。启动了socket以后,就像建立了一条客户端与服务端的管道,两边可以互通有无。

不是手机的问题,耳机的问题。

蓝牙耳机不止一种,我所知的一种是a2dp的一种不是a2dp的,a2dp的耳机就是可以听歌的,另外一种不能听歌

对于a2dp的耳机,如果短按一次hook键,系统会当作一个keyevent来处理,走的是发送广播的流程。如果短按多次,或者长按一次hook 键,不会有keyevent,会当作一个类似与“BVRA”的AP命令来处理,处理过程可以参考源码的BluetoothHandsfree.java, 这个时候就收不到广播。

而对于不是a2dp的耳机,无论怎样按按键,都是发送ap命令,不会收到keyevent。

解决方法有两个,一是换个耳机,二是改rom,在蓝牙bsp那部分,无论什么耳机都走keyevent的流程

function DoEvents(){

this.lstner=[]//this.lstner? lstner是属性吗? this又是指什么对象, []是指数组吗?javascript的写法是这样的吗? 不用加个声明吗

//相当于类参数(this指当前类)。声明了一个数组,javascript的写法就是这样的,要加声明么?"=[]"不就说明了吗。

this.addListen=function(obj){

//添加侦听

obj=typeof(obj)=="string"?document.getElementById(obj):this.lstner.push(obj)

//这是一个逻辑判断的三元表达式(typeof(obj)=="string"?document.getElementById(obj):this.lstner.push(obj)) + 赋值(obj=),

//意思是如果obj是string类型(== 逻辑判断),则返回document.getElementById(obj),否则返回this.lstner.push(obj)<-将obj压入数组中后返回

//在最后,将返回值赋给obj,从下面的处理来看,其实赋值给obj没有什么实质用处。

}

this.broadcastEvent=function(f,args){//广播事件// broadcastEvent为什么在帮助文档和搜索引擎里找不到呢,他是指什么 <-内部自定义的方法,相当于类方法

for(i=0i<this.lstner.lengthi++){

eval(f).apply(this.lstner[i],args)//这句的意思是? ,<- 将指定的事件(f)绑定到需要触发事件的对象(this.lstner[i])上。

// 这个 f是指什么? args又是指什么? <- f是由调用时指定的事件名称(methodName), args 是该方法触发是所要的参数列表,请参照调用的地方。

}

}

}