网络故障记录

之前给家里的路由器升级版本,为了防止中间有需要网络的地方,因此将一个原来做无线热点的路由器临时配置成主路由,后来升级完成后,就直接将网线插入lan口去做桥接,接着做无线热点。

但网络一直是比较奇怪的,有的时候,会突然提示无法联网,或者连着连着会突然断掉。我的一台老手机,经常需要把无线断开重连才能正常上网。

前几天在配置macvlan网络的时候, 表现就更怪异了,我配置过很多次的macvlan。结果在docker容器中,发现网关ping可以通,但无法联网,ping域名,可以显示ip,但无法连通。这个很 奇怪的现象,按正常而言,可以拿到ip,一般可以ping通,不会只有一半。但很偶尔的一下,网络可以通了,一切都可以正常了。新启动的,90%都不通。

macvlan模块的加载,检查了, 存在。

我检查了网卡的模式,混杂模式我也开了,无用

我以为必须要一个bridge的网桥,然后我添加了,macvlan的parent也设置为网桥,无用。

只要不是macvlan,就可以通,ip forward?开了,无用。总之,我能找到的办法都找了,但就是不管用。

后来,我在使用curl测试的时候,访问主路由(同时也是网关)的网页时,忘了输入端口号了,我一般不会采用默认的端口号,然后curl竟然返回网页内容了。这是个什么鬼?我看了下网页内容, 是我那台做热点的wifi路由器的页面。添加端口号后,无法访问,但那台路由不是桥接么,为啥还能提供服务啊?想起之前路由替换的时候,为了不影响网络布局,就把临时的路由器的地址段和 老的保持一致,dhcp服务也开着,相当于现在局域网中有两台dhcp服务,而且,这两个dhcp服务分配的地址都一样的,互相在抢资源。。。。。于是,赶紧把做热点的无线路由器重置掉(让两个路由器不在同一个网段),并且 把dhcp服务关掉。紧接着所有的一切都正常了,网络也比原来好太多了。

【一起做网游吧10.0】Start Game:加载地图

虽然从目前的角度来说,这个教程在不断的前进着。但从寻找资源来说,进展困难,我本来想让10.0的教程的内容为实现一个玩家在地图中行走,但资源找来找去,只找到了相对合适的地图资源,人物的资源一直没有找到,因此就先实现了地图资源。

考虑到目前客户端j2me的局限,我决定j2me的jar中,仅留有代码,所有的地图资源等,都通过服务器下载。因此服务器端必须对这一点进行支持。也因此增加了两个命令。而代码的更新,更大的体现在客户端。

先看下目前客户端的截图吧:

上述截图的资源完全来自开源的daimonin,我本身不会进行美工的工作内容,如果可以的话,就不用这么辛苦的找资源了。

为了实现资源的下载,在客户端,我修改了底层传输支持的Netstream的机制:

继续阅读【一起做网游吧10.0】Start Game:加载地图

一起做网游吧【9.5】:补丁,设置服务器地址和端口及网页管理界面更新

首先,代码还在上次的位置,我替换了压缩文件,不用再说,以后也是如此。

前几天,我准备找一个free的地图编辑器,当然,最好是open source的,同时,看看dojo,研究dojo而不是extjs是由于相比来说,dojo的模块划分我比较喜欢,而且,dojo中的测试程序都很有针对性和独立性,这个我比较喜欢。顺便将服务器的管理界面更新了下,修改成了基于dojo的。我对于extjs并没有什么恨意,只是由于不太习惯风格而已,对于extjs比较熟悉的人可能觉得extjs比较好,不管怎么,这只是一个风格而已。顺便提下学习的过程,半天时间来熟悉下小例子,半天时间将界面的布局弄好,一天时间将表格加上,用了各种办法,大概花了两天时间研究出了如何更新表格内容(可能不是正规的方法,谁要是知道的话,还请赐教)。

前段时间,我也又在落灰的wii上安装了erlang,然后将服务器仍在那个上面,运行,然后客户端在切换服务器的时候客户端挂掉!!!,原因在于服务器返回的地址是”127.0.0.1″,这是个比较严重的问题,决定将进入游戏之后的内容稍微缓和一下,反正地图编辑器还没有怎么熟悉,地图的资源也要慢慢找,就顺便的添加了下服务器的IP和端口设定,使服务器启动的时候还是监听本地的”127.0.0.1″,返还给客户端的可以是自定义的IP地址,提供端口设定是考虑到可能需要路由进行端口映射。

先说服务器内容,使用下面的函数可以获得服务器的公网IP,至于能不能公网直接访问,这就要看你的服务器的IP设定了。

       getip() ->
    case http:request(get, {"http://www.ip138.com/ip2city.asp",[]},[],[{version, 1.1}]) of 
        {ok, {{_,Ok,_},_, Content}} ->
            Index1 = string:rstr(Content, "["),
            Index2 = string:rstr(Content, "]"),
            Ip = string:sub_string(Content, Index1+1, Index2-1),
            Ip;
        Other ->
            io:format("~p~n", [Other])
    end.
       

我是从ip138.com获得的公网IP,希望不会带来什么怨言。同时,添加了一个reload函数,因为现在服务器还不是非常的问题,可能由于某些未处理的原因,造成服务器的端口监听关闭,使用下面这个函数可以重新加载。需要传递IP和Port的话,则是根据设定的ip2和port2来判定的:

继续阅读一起做网游吧【9.5】:补丁,设置服务器地址和端口及网页管理界面更新

笔记:whitte linux的无线网卡启动

之前提到过关于wii来做服务器,前两天又重新弄了下,结果发现无线总是启动不起来,起初以为是内核的事情,后来才发现用的命令错误。

起初使用的是下面的命令:

       ifconfig wlan0 up
       

但该命令启动网卡后,无法获得ip地址等等,根本就无法使用,还说什么qos错误,hwcrypt之类的话。后来查了下资料,发现用下面的命令就完全没有问题了。

       ifup wlan0
       

关闭么,自然就是:

       ifdown wlan0
       

了,上面的所有命令都需要root权限。

一起做网游吧【9】:多服务器支持

兑现上周的承诺

代码的位置:

;

先说下编译的方法,满足某些人的好奇心。截图就不提了,之前的有。

由于这次引入了web的方式,所以编译的准备工作有些麻烦。我使用mochiweb来作为web的服务器端程序,extjs作为客户端的javascript程序库,这两个库均未包含在git的仓库中,但可以通过执行others目录中的get_others.sh来获取,这个简单的脚本将获取mochiweb和extjs,并放置到相应的位置中,同时还设置了几个链接。之所以设置链接是由于压缩成7z之后,原来的链接特性消失了,维护不方便。对于ubuntu 10.04和fedora13来说,还有一个问题是关于mochiweb的,貌似最新的mochiweb需要使用erl R14编译,但这两个发行版都是R13(其他的我没有试),编译的时候会出错的,最简单的就是将每个erl最后的那些个测试删掉就可以了。如果服务器的源代码编译不过去,则可能是中文注释的问题,之前有erlang的中文注释补丁的办法,这里不说了。

首先执行get_others.sh,然后到server下执行make,到client下面最里面的makefile目录下执行make,就完成了。(当然,环境变量什么的还是需要手动设置的。)

运行就是以前的start-dev.sh,没什么好说的。下面开始技术分析:

在记录中(schema.hrl)的client段,变成了下面的样子:

       -record(client, {server = none, 
                 player = none,
                 server_name = none,
                 server_port = none,
                 server_ip = none,
                 server_pid = none,
                 game=none}).
       

添加的变量类型主要是为了进行多服务器的支持,server_pid为port端口的pid值,这样客户端来区分当前在哪一个服务器上。其他的没什么说明的。

server数据库中的记录格式:

        -record(server, {
          id,
          socketpid = none,
          ip = none,
          port = none,
          name = none,
          enable = false,
          maxuser = 5000,
          curuser = 0,
          pid = none
          }).
       

继续阅读一起做网游吧【9】:多服务器支持