当前位置: 编程技术>移动开发
本页文章导读:
▪wifi学问相关术语 wifi知识相关术语
RSSI :
Received Signal Strength Indication接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。
BSSID:
BSSID,一种特殊的Ad-hoc LAN的应.........
▪ SmartFoxServer项目完成小结 SmartFoxServer项目完成总结
总体来说,如果是想做一个比较简单的虚拟现实服务,拿sfs来做还是很方便的,省去了前期构造服务器网络,实现数据库接口,数据同步等等一些基础功能的时间,可以一.........
▪ 网站建设札记 网站建设笔记
select content_id,'''' || txt || '''' as txt,'''' || txt1 || '''' as txt1,'''' || txt2 || '''' as txt2,'''' || txt3 || '''' as txt3 from jc_content_txt;
<Context path="" docBase="E:\suntak\Web"
debug="0" privileged="tru.........
[1]wifi学问相关术语
来源: 互联网 发布时间: 2014-02-18
wifi知识相关术语
RSSI :
Received Signal Strength Indication接收的信号强度指示,无线发送层的可选部分,用来判定链接质量,以及是否增大广播发送强度。
BSSID:
BSSID,一种特殊的Ad-hoc LAN的应用,也称为Basic Service Set (BSS),一群计算机设定相同的BSS名称,即可自成一个group。每个BSS都会被赋予一个BSSID,它是一个长度为48位的二进制标识符,用来识别不同的BSS。其的主要优点是它可以作为过滤之用。
SSID:
SSID(Service Set Identifier)也可以写为ESSID,用来区分不同的网络,最多可以有32个字符,无线
网卡通过连接不同的SSID(即AP)并输入相应AP的密码就可以进入不同网络,SSID通常由AP广播出来,通过Windows自带的扫描功能可以相看当前区域内的SSID。出于安全考虑可以不广播SSID,此时用户就要手工设置SSID才能进入相应的网络。简单说,SSID就是一个局域网的名称,只有设置为名称相同SSID的值的电脑才能互相通信。
工作原理图
BSSID 是指站点的 MAC 地址,(STA)在一个接入点,(AP)在一个基础架构模式, BSS 是由 IEEE 802.11-1999 无线局域网规范定义的。这个区域唯一地定义了每个 BSS 。在一个 IBSS 中,BSSID 是一个本地管理的 IEEE MAC 地址,从一个 46 位的任意编码中产生。地址的个体/组位被设置为 0 。通用/本地地址位被设置为 1 。
WPA:
WPA 全名为 Wi-Fi Protected Access,有WPA 和 WPA2两个标准,是一种保护无线电脑网络(Wi-Fi)安全的系统,它是应研究者在前一代的系统有线等效加密(WEP)中找到的几个严重的弱点而产生的。
[2] SmartFoxServer项目完成小结
来源: 互联网 发布时间: 2014-02-18
SmartFoxServer项目完成总结
总体来说,如果是想做一个比较简单的虚拟现实服务,拿sfs来做还是很方便的,省去了前期构造服务器网络,实现数据库接口,数据同步等等一些基础功能的时间,可以一上来就直奔主题,开发自己项目相关的功能.
Sfs的接口封装也比较简单,基本上看到接口名就能知道是做什么用的,参数是什么意义,而且他的文档也比较详细,对于非服务器开发专业人员也比较方便.sfs的定义也主要在此,比如他最早支持的flash客户端api.
而随着sfs的成功,也开始将目标转向了目前新兴的iphone, android, sillverlight, unity等 客户端.这次使用c# client api做了一个winform测试程序,使用起来也是非常的方便.
第一次拿sfs做商业项目,也还是遇到了一些问题,总结一下,另外还有一些未完善的地方,后面再花时间继续实现.
CustomLogin的处理在zone extension里,必须先join room才能使用xt message.所以需要先写一个zone extension,在这里处理登录验证,注意验证成功后需要向客户端发送room list, 客户端必须收到room list消息才能做后面的操作,这是sfs限制死了的.
本来我想在extension里让客户端验证成功后直接join room,未果,调试良久才发现,客户端未收到room list,不能join room.
Sfs的user variables只支持bool, integer, string类型,其他类型的数据不能同步.这个问题困扰了我差不多一个小时,最后在客户端一步步跟踪属性同步过程时才发现,其他类型的variable都被忽略掉了.
于是,为了同步float坐标数据,我不得不加上了float.toString(),数据量又大了不少.
Sfs消息定义的方式,不要像sample里那样,直接写字符串名字,改用枚举或者常量定义.每个extension name和command name都只有一个字节,在枚举中也可以定义出128个,完全够用.
这样可以省不少带宽占用量,可以在client上开启debug message开关,看一下一个简单的消息发送会占多少字节.
如果想同时在eclipse和netbeans下对一个项目进行开发,注意文件编码的问题.eclipse下创建的文件默认编码为gbk,netbeans下创建的文件默认为utf-8,而在eclipse下导入文件时他并不会自动检测文件的编码,所以,你需要在文件的属性里手动设置一下编码方式.另外,netbeans下要在文件中显示中文字符只能使用utf-8,使用gbk会出乱码,如果出现此类错误,修改一下文件编码方式以及指定新的编码即可.
要关于利用IDE编译环境.在项目最开始的一周里,我使用trace来进行调试,一次次的通过trace打印出中间变量,然后再修改代码,再启动服务器,再看trace信息……在我快要陷入崩溃绝望之时,终于,决定建一个好用的集成调试环境.在尝试eclipse失败后,我成功的在netbeans中打下了断点,单kh步跟踪,于是,整个世界变得清静多了……
关于如何在netbeans中调试extension,可以参考我之前的一篇文章
sfs中服务器与客户关通信的协议有三种:xml,json和raw string,使用json会比xml节省不少字节,但其仍然占用比较大的带宽开销.如果是数据交互量比较小的应用,这个问题不会太大,但对于即时战斗类MMO来说,可能会成为一个比较大的问题.尝试了一下使用raw string的方式传递结构体,但是没找到比较好的方法,以后有机会再继续,如果可能的话,结合google proto buffer和raw string方式,将会是一个比较好的方案.
在处理extension message时,按照示例所提供的方法,先取出cmd,然后使用equal的方式一个个进行比较,然后转到对应的处理函数.对于消息种类比较小的应用来说还没发现问题,但是对于有大量自定义消息的应用,这里就需要修改一下了.
Sfs的db extension目前看起来只能在当前线程中处理,并且是阻塞式的,暂时没有尝试使用多个线程操作数据库,也没有把数据库操作改为异步操作.这也是未来需要进一步改进的地方.
暂时不清楚SFS是否会为每个room开启一个单独的线程,或者是每个extension一个线程.如果zone里房间数比较多的话,分多个线程处理也是需要的,未来也需要继续考虑一下多线程的问题.
Sfs的实现是把一个room当成了一个广播单元,这对于开房间类的游戏来说没有问题,但是如果相用它来做MMO就需要注意一下,因为user variables的同步是以整个room为单位的,也就是当一个房间里人数达到几百人甚至几千人的时候,某个玩家的进入和退出房间消息,属性修改消息的广播量都会是巨大的.但是在没有源码的情况下想要修改这个不大容易,也就是限制了sfs的应用环境.
总体来说,如果是想做一个比较简单的虚拟现实服务,拿sfs来做还是很方便的,省去了前期构造服务器网络,实现数据库接口,数据同步等等一些基础功能的时间,可以一上来就直奔主题,开发自己项目相关的功能.
Sfs的接口封装也比较简单,基本上看到接口名就能知道是做什么用的,参数是什么意义,而且他的文档也比较详细,对于非服务器开发专业人员也比较方便.sfs的定义也主要在此,比如他最早支持的flash客户端api.
而随着sfs的成功,也开始将目标转向了目前新兴的iphone, android, sillverlight, unity等 客户端.这次使用c# client api做了一个winform测试程序,使用起来也是非常的方便.
第一次拿sfs做商业项目,也还是遇到了一些问题,总结一下,另外还有一些未完善的地方,后面再花时间继续实现.
CustomLogin的处理在zone extension里,必须先join room才能使用xt message.所以需要先写一个zone extension,在这里处理登录验证,注意验证成功后需要向客户端发送room list, 客户端必须收到room list消息才能做后面的操作,这是sfs限制死了的.
本来我想在extension里让客户端验证成功后直接join room,未果,调试良久才发现,客户端未收到room list,不能join room.
Sfs的user variables只支持bool, integer, string类型,其他类型的数据不能同步.这个问题困扰了我差不多一个小时,最后在客户端一步步跟踪属性同步过程时才发现,其他类型的variable都被忽略掉了.
于是,为了同步float坐标数据,我不得不加上了float.toString(),数据量又大了不少.
Sfs消息定义的方式,不要像sample里那样,直接写字符串名字,改用枚举或者常量定义.每个extension name和command name都只有一个字节,在枚举中也可以定义出128个,完全够用.
这样可以省不少带宽占用量,可以在client上开启debug message开关,看一下一个简单的消息发送会占多少字节.
如果想同时在eclipse和netbeans下对一个项目进行开发,注意文件编码的问题.eclipse下创建的文件默认编码为gbk,netbeans下创建的文件默认为utf-8,而在eclipse下导入文件时他并不会自动检测文件的编码,所以,你需要在文件的属性里手动设置一下编码方式.另外,netbeans下要在文件中显示中文字符只能使用utf-8,使用gbk会出乱码,如果出现此类错误,修改一下文件编码方式以及指定新的编码即可.
要关于利用IDE编译环境.在项目最开始的一周里,我使用trace来进行调试,一次次的通过trace打印出中间变量,然后再修改代码,再启动服务器,再看trace信息……在我快要陷入崩溃绝望之时,终于,决定建一个好用的集成调试环境.在尝试eclipse失败后,我成功的在netbeans中打下了断点,单kh步跟踪,于是,整个世界变得清静多了……
关于如何在netbeans中调试extension,可以参考我之前的一篇文章
sfs中服务器与客户关通信的协议有三种:xml,json和raw string,使用json会比xml节省不少字节,但其仍然占用比较大的带宽开销.如果是数据交互量比较小的应用,这个问题不会太大,但对于即时战斗类MMO来说,可能会成为一个比较大的问题.尝试了一下使用raw string的方式传递结构体,但是没找到比较好的方法,以后有机会再继续,如果可能的话,结合google proto buffer和raw string方式,将会是一个比较好的方案.
在处理extension message时,按照示例所提供的方法,先取出cmd,然后使用equal的方式一个个进行比较,然后转到对应的处理函数.对于消息种类比较小的应用来说还没发现问题,但是对于有大量自定义消息的应用,这里就需要修改一下了.
Sfs的db extension目前看起来只能在当前线程中处理,并且是阻塞式的,暂时没有尝试使用多个线程操作数据库,也没有把数据库操作改为异步操作.这也是未来需要进一步改进的地方.
暂时不清楚SFS是否会为每个room开启一个单独的线程,或者是每个extension一个线程.如果zone里房间数比较多的话,分多个线程处理也是需要的,未来也需要继续考虑一下多线程的问题.
Sfs的实现是把一个room当成了一个广播单元,这对于开房间类的游戏来说没有问题,但是如果相用它来做MMO就需要注意一下,因为user variables的同步是以整个room为单位的,也就是当一个房间里人数达到几百人甚至几千人的时候,某个玩家的进入和退出房间消息,属性修改消息的广播量都会是巨大的.但是在没有源码的情况下想要修改这个不大容易,也就是限制了sfs的应用环境.
[3] 网站建设札记
来源: 互联网 发布时间: 2014-02-18
网站建设笔记
select content_id,'''' || txt || '''' as txt,'''' || txt1 || '''' as txt1,'''' || txt2 || '''' as txt2,'''' || txt3 || '''' as txt3 from jc_content_txt;
<Context path="" docBase="E:\suntak\Web" debug="0" privileged="true" reloadable="true"> </Context>
D:\MySQL\Data\my.ini [mysqld] skip-grant-tables source d:\1.sql set names utf8 show variables like 'character%'
public static void main(String[] args) { String d = "D:/MySQL"; File f = new File(d); File[] files = f.listFiles(); for (File file : files) { if (file.isFile() && file.getName().endsWith(".sql")) { System.out.println("source " + file.getName()); System.out.println(file.getName().substring( 0, file.getName().lastIndexOf(".sql"))); } } }
to_date\('\w{2}-\w{2}-\w{4}\s\w{2}:\w{2}:\w{2}',\s'dd-mm-yyyy hh24:mi:ss'\) 匹配 '2011-01-03 21:37:38'
最新技术文章: