zoukankan      html  css  js  c++  java
  • 日志

    今天继续在做聊天的小程序
    1.在引用hibernate的时候,读取hibernate.cfg.xml的时候不断地提示not found ,起初是怀疑路径的问题,可是改了很多次
    还是没有用,想不到为什么会报那个错,至今还没解决那个问题
    2.界面的数据发送已经调试好了,借助一个static 的iosession 将起初连接的iosession保存下来,这样每次,界面发送数据包的
    时候就可以用这个iosession了。把界面和业务的操作分开。

    体会:一个小问题可能一天都解决不了,一直卡在那里,毕竟看到的,和自己实践的还是有很大区别的,明天问问其他人
    最近要加紧了。

    明天计划:
    主要业务逻辑实现

    这周的工作
    这周是在上周框架熟悉的基础上,在做多人聊天程序,界面编写完成
    用户登录,注册已经实现,对于之前学习的框架有了实际的体会和熟悉
    也发现了很多问题,需要不断学习。

    下周计划
    多人聊天程序的群聊和私聊的实现,聊天记录查询,禁言功能的实现

    今天主要在做聊天小程序
    1.在做到群聊的时候,服务器返回数据,客户端接收到了,但是无法显示在界面上,找了很多办法还是没有解决
    2.在给客户端发送在线用户信息的时候,发送不成功,暂时没有找到找到问题原因

    今天把群聊和私聊的逻辑梳理了下,解析输入框中的用户名个消息的信息,通过传递给服务器消息类型信息。是群发还是私聊
    在服务器进行解析,分别处理.

    明天计划
    1.解决今天Bug
    2.把群聊和私聊做好
    3.加入禁言的功能


    今天主要在做聊天程序
    1.解决了昨天界面显示数据的问题,
    原因是每次都会实例一个新的对象,所以每次的界面是不同的,显示不了数据
    改进:将聊天类声明改为static的类型就可以了,保证界面是始终保存的,不会再次实例化,swing为什么会不断实例化
    界面类还是不懂
    2.解决了昨天客户端接收来自服务器的用户列表不成功的问题
    原因是在客户端解析的时候解析错误,始终取不出来自服务器的数据,其实客户端接收到的
    改进:将发送的数据类型改为数组类型,然后在客户端解析的时候,解析为list。
    3.完成了群聊和私聊功能
    4.完成用户列表显示功能
    5.完成日志记录功能,包括群聊日志和私聊日志

    体会:时间是还太急,有些问题解决了,还是对内部的深层次的原因不是很理解,有时间仔细调试下
    现在的客户端和服务器的数据传递还是有点不方便的,有些复杂类型的数据传递的支持不太好。

    明日计划
    1.最近10条聊天记录的查询显示
    2.禁言功能
    3.用户列表的刷新


    今天在做聊天程序
    1.完成了最近10条的群聊和私聊的聊天记录显示
    2.禁言功能完成

    明日计划
    1.定时答题


    今天继续在做聊天程序
    1.对禁言进行了完善,但是还是存在一些问题,对禁止说的关键字只能单个全部的匹配,如果禁止说的话
    是夹杂在语句之间则不能对正确的匹配,问题在于如果用户是单纯的发送禁言可以很好识别,但是要是夹杂在
    语句中间则不一定是禁言,没有一个标准,现在只做到了机械的完全匹配。
    2.在java中的时间类型处理有了深入的体会,首先使用java。util.datelai 来生成一个当前时间,然后
    用simpleformatdate进行转化为想要的形式,要想得到一个距离当前一个间隔的时间 要用到calender
    的set进行设置。
    3.在进行一个数据转换时发现 object 不能强制转换为string类型 因为这个还找了好长时间的bug
    如下:Object aa = 11;
    String bb = (String)aa;
    System.out.println(bb);
    转换时会报错:java.lang.Integer cannot be cast to java.lang.String
    4.用户增加了金币功能。
    体会:今天主要在调试bug,有很多是数据传送的时候格式转换出问题,禁言一开始是在客户端做得
    感觉那样简单,而且效率高。但是有人提醒我那样会很容易作弊,客户端的数据玩家是可以
    改动的,为了保证数据的安全性还是改为在服务器做了,只是将结果传回客户端。一些重要的处理要在
    服务器完成。

    明日计划
    1.定时抢答完成
    2.代码逻辑优化

    今天继续做聊天程序
    1.完成了计划完成好久的定时在线抢答
    2.优化了部分代码

    体会:服务器和客户端的网络通信是需要时间的,如果在服务端对这个时间不考虑很容易在成错误的发生
    ,当一起发送两个报文,是不确定那个是肯定先到达服务器的,有的顺序在前面发送的也不能肯定
    服务器一定会先收到他,这就容易造成很多问题,例如抢答状态的确定,是通过发送报文来通知
    客户端的,如果此时还有数据在发往客户端,就会对这个状态的判断造成错误,明明服务器翔客户端发送
    不能再答题了,可是发送题目的报文先到了,或者是这个不能再发送题目的报文会丢失,都会造成服务器
    一直不断地发报文。网络通信在一定程度上很难保证正确,要在程序里多做些因为网络原因造成的错误的
    判断,对重要的数据尤其如此。


    今天主要在对之前的聊天程序做优化
    修改bug
    1.修正了在线聊天用户不能全部显示的问题
    2.抢答问题,修正了答对了的用户的界面不能显示最新的金币数量的问题
    3.对于登录时 账号密码错误不能登录,给予界面提示
    4.修正了关闭聊天主界面不能关闭与服务器连接的问题
    代码优化
    1.删除了多余无效的注释
    2.对部分变量进行修改

    体会:在 程序的易用性,稳定性方面还要多做工作,对于很有可能的错误应给与提示,对于代码的逻辑应清晰处理
    对于繁琐无用的逻辑应简化处理,一个类或者函数应简化掉与它不相关的功能,使模块化更强
    耦合性更小。

    明日安排

    阅读游戏源代码


    今天主要是看源代码和改bug
    1.学习了java线程池方面的内容
    2.修正了聊天程序当用户退出时,其他用户在线用户列表不能实时更新的问题
    3.看了万炮捕鱼程序代码。

    体会:服务器后台数据发送现在是通过线程池的机制去处理的是,当服务器接收到数据之后,放入队列,
    从队列中不断循环取出数据,进行发送。但是现在线程池的corepoolsize是1,对于cpu的利用率是不够,
    因为发送线程的任务还是有很多计算的,要是可以在线程池中多创建几个线程,可能会时cpu利用率提高。
    之前的聊天程序对于用户退出的后续操作做的还是不够仔细,造成用户列表的更新有问题,今天修改了下
    在用户下线后,广播一个新的用户列表给其他的用户,使得用户列表可以真实反映在线用户的情况。
    看了万炮捕鱼的代码,和之前的的demo的结构很像,处理的过程也是相似的,只是有些逻辑复杂了点
    还有些spring注入和注解的看不懂,之后要看看spring的深入的东西。

    明日计划
    看代码

    37 页


    今天主要在看struts2的内容
    对strut2的基础做了了解
    1.struts是基于MVC的WEB开发框架
    2.MVC:是Model、View、Controller这三个英文单词的缩写。
    “Model”代表的业务逻辑这块由Java实现的组件。“View”则代表了表示界面,
    “Controller”代表的是处理流程控制,主要功能是实现业务逻辑如何和表示界面相关联的技术
    3.起初的开发模式是直接在jsp里面写逻辑,里面代码会很复杂,页面之间的代码复杂,复用维护困难
    MVC的开发模式是把程序分为输入,处理,输出三个部分进行处理,页面显示,逻辑控制是相互分离的
    可以对他们进行修改而不影响其他。
    4.Struts2基本范围几大块:标签库,filterdispatcher和action,配置文件,校验规则,类型转化
    sitemesh页面布局,国际化和本地化。

    体会:刚接触struts ,MVC的思想还是之前熟悉的,对于struts的处理流程还是不太清楚,接下来
    要做点小程序加以熟悉。
    明日计划:
    继续看struts2,做点小demo

    今天主要在看struts
    做了小demo对struts的运行流程有了直观的了解
    1.开发struts进行的基本步骤
    导入struts包
    配置struts.xml文件
    配置web.xml文件
    在struts.xml中进行action的配置
    编写java类和jsp文件
    2.一个jsp中的form对应于一个pojo类
    3.struts.xml中的package应该和类的包名对应
    4.验证功能是在execte执行前进行的,验证失败,程序流程会跳转到struts.xml中配置的result的input
    指定的页面中

    体会:struts对请求和响应进行很很大程度的封装,以前的网页开发模式是浏览器请求到服务器,服务器获得
    请求对象request ,解析request中的数据,根据请求数据进行相应的处理,然后把要返回给浏览器的数据
    分装成为response对象进行返回,实现B/S的结构。在struts中把请求和响应的原始形式进行了屏蔽,我们只要
    配置action,写主要的处理业务逻辑,就可以实现业务,简化了解析和封装的步骤,更加的高效,但是
    必须按照struts的流程来做,在它指定的流程中加入自己的逻辑。

    周志

    这周主要是
    1.修改了聊天程序中的一些bug
    2.看了下万炮捕鱼的代码
    3.学习struts2

    体会:聊天程序还是有一些bug好没有解决,有时间还是要解决下,万炮捕鱼代码结构上是了解了,具体的一些
    细节还是要仔细看看。struts2刚接触,基本概念和流程这两天明白了,接下来要对其中一些具体的功能细节学习

    下周计划:
    1.前一两天继续学习struts2的内容
    2.之后的时间做web的开发,针对之间的聊天程序做统计功能。
    3.为游戏的统计做准备工作


    49页

    今天主要在学习struts2的内容
    拦截器方面
    1.拦截器:普通的java对象,作用是动态的拦截action调用
    2.配置拦截器 <interceptor></interceptor>
    3.配置拦截器栈:<interceptor-stack><interceptor-ref></interceptor-ref></interceptor-stack>
    4.拦截器和拦截器栈之间可以嵌套使用
    5.可以定义自己的拦截器,继承abstractinterceptor 重写interceptor方法即可
    6.文件上传下载拦截器的使用
    7.在struts.xml中使用自己的拦截器的时候,如果自己的拦截器和struts默认的拦截器同名的话,
    要把自己定义的拦截器写在默认的拦截器的前面,因为struts中的同名拦截器只调用一次
    8.<default-interceptor-ref>默认的全局拦截器,对所有的action都起作用
    标签库
    1.在struts-tags.tld中定义了strut2的标签,也可以自己定义自己的标签
    2.append标签, generator标签,if、else、elseif标签, iterator标签, merge标签,sort标签
    subset,action标签,bean标签,date标签, debug标签, include标签, push标签,url标签,基础表单标签
    复杂表单标签

    velocity部分
    在普通的HTML代码里加入动态的数据

    体会:对于页面的显示,最好是使用标准的html5标签。

    明日计划:
    继续学习struts2 的内容


    125

    今天在学习struts和做demo
    上午把struts的大部分内容看完,对于标签,国际化,界面显示技术做了了解
    下午结合自己之前的聊天demo 进行ssh的开发,把之前的聊天程序中的数据库中的相关信息取出来
    展示在页面上
    体会:在进行ssh的整合的时候,出现很多的问题,不能运行起来,解决了一个下午,总算可以运行起来
    在一个框架中进行开发时没有遇到的问题都出来了,很多错误感觉莫名其妙,总结看来还是对
    框架的熟悉不够,只能按部就班的照着文档demo使用,在几个框架整合的时候就凸显出了问题,简单的
    jar包报错都不知道原因,以后多做些实例,熟悉起来这些框架

    明天计划
    ssh的demo继续做,加入具体的逻辑。

    今天主要在看大厅服务器的代码
    1.安装了管理后台的客户端,推广员APP ,测试了管理后台客户端和大厅服务器的通信过程,其过程
    类似之前做过的聊天demo ,总的过程是 客户端发报文 ,服务器解析报文,根据请求去做处理,然后给予客户端
    一个应答报文。推广员APP和大厅服务器通信的过程是相同的
    2.阅读了大厅服务器的部分代码,大厅服务器启动时会读取applicationContent文件,进行注入,开启相应的端口监听
    ,客户端选定一个端口和服务器的相同端口进行连接的建立,然后就可以进行通信了。
    3.服务器增加一个端口服务的过程,在applicationContext里配置一个新的socket,指定端口号,和handler的处理类
    增加一个sockethandler的类 ,其继承iohandler,在其中的messageservice中进行反射,调用相应的servive类,进行处理
    在service类中调用dao,util等进行具体的逻辑处理,servive类将处理结果,进行发送。然后客户端接收处理。一个基本的
    客户端服务器交互就完成了。

    体会:大厅服务器开启多个端口,每个端口提供相应的游戏服务,若是服务请求太多,可以再分到不同的计算机,都是很容易的。
    客户端其实也可以这样做,在功能上进行分开,每个功能部署到不同的机器上

    明日计划:
    看大厅服务器代码 深入了解处理的逻辑

    今天看了大厅服务器的代码
    对于socket,service ,dao和配置文件详细看了下,对于spring的注解进行了学习
    对于hibernate的查询深入了学习
    1.socket中数据的传输协议现在是 服务的类名/方法,客户端发送报文发送的是 服务的类名/方法 加上请求参数
    客户端收到后进行一系列的解析 ,提取出了类名和方法 运用反射获得结果,进行发送返回,返回前的数据是map的
    类型,发送前的数据封装也是这样的。为什么用map 可能是map取值容易。
    2.service 中有一些方法提供具体的服务,方法中大多是调用dao中的方法进行数据库的操作,复杂一点的加点判断和逻辑
    本质还是数据库的操作
    3.dao 采用了hibernate提供的方法 进行操作数据库 ,代码简洁
    4.配置文件 :开始时候不太能看懂 ,然后看了些spring的注解方面的文档才明白,整个项目采用了大量的注解,进行bean的定义
    和自动注入,感觉spring确实强大,节省了很多人力工作。
    5.hibernate的查询 开始只是简单的使用 ,在看dao的代码的时候 学习了很多了新的用法,搞清楚了几个基本的问题,总结如下:
    delete uodate insert 一般使用 createquery().executeupdate
    select 如果查询的结果是单个值 例如:select sum(filed) from table 用createquery().uniqueresult就可以了
    如果查询的是比较多的东西:可以分几类:
    查询全部的字段 select * from table 要用到 createquery().list,此时list里面
    都是具体的对应于表的类对象,这种方式还是比较容易的
    查询的是一个字段 如 select name from table createquery().list 此时list里面
    是object的对象,遍历取出就好。
    查询的是几个字段 比如:select name, pwd,age from table createuery().list里面
    则是数组,这时候不方便取出使用,这时候可以使用 select new 包名.类名(属性列表)from 实体类
    进行查询,然后在实体类里面加入相应的构造函数,此时list里面还是实体类的对象,方便使用

    体会:关于spring的注解的使用,对于类级别而且不会发生变动的配置有较好的便利性 ,如果对于容易发生调整的类最好还是
    使用传统的xml的配置,易于更改,就像socket的配置那样。

    明日计划
    学习hibernate的注解
    看下其他部分的代码

    今天看了hiberbate注解,java 线程池方面的介绍 ,前端bootstrap框架介绍
    1.之前用hibernate 在进行表和类的映射使用的是hbm.xml的文件 按照表字段和类字段一一对相应建立关系,如果有
    很多的表和类会有很多的配置文件,spring一开始也是这样,需要在配置文件里写很多的bean,很不方便,hibernate和
    spring一样引入注解的,在实体类上加入一些简单的注释,就可以不用写那么多的配置文件,而且还可以根据注解直接生成数据库表

    2.现在的服务器框架中的线程池之前觉得有点问题,今天深入看了下文档,发现现在的服务器线程池确实是有问题的
    首先 线程池 corePoolSize设置是1 ,这里的corepoolsize 文档里面解释的是 the number of threads to keep in the pool, even if they are idle
    也就是池内保持运行的线程数目,后面的一个参数maxpoolsize在 缓存队列满的时候和线程池运行的线程数目和设置的
    corepoolsize相同的时候,会再次生成线程,当达到最大线程数目的时候 再来的线程会根据handler 的定义去处理
    但是现在设置的boolckqueue是 SynchronousQueue<Runnable>,查了下文档,这种队列的意思是它将任务直接提交给线程而不保持它们,也就是
    不会放入缓存队列,直接创建线程去处理。
    现在的服务器的线程池简单来说是:每次接受一个数据发送的请求,就生成一个线程去处理,没有线程池的作用了
    不会缓存任务,然后开启线程去处理。和使用messagesend.send效果是相同的
    现在想到的办法是,将线程池的 BlockingQueue改为 ArrayBlockingQueue 然后设置 一个和合理的大小,建议是线程池的
    corepoolsize设置的大点 缓存队列设置的小点,这样有利于cup使用率的提高,但是也会产生调度的开销变大,这个要折中
    设置,经过测试,取一个比较合理的值,让cpu的使用率提高。从而服务器的效率变高。

    采用这种发时候可以进行拒绝策略的设置 也就是线程池初始化的handler 可以定义自己的RejectedExecutionHandler用于处理
    拒绝的任务

    3.了解了点前端的bootstrap 可能要用到。

    周志
    这周主要是学习新知识和看代码
    1。看了大厅服务器的代码
    2.hibernate,spring的深入了解
    3.学习struts2基础

    下周计划
    新项目开发
    sturts2学习


    今天主要在做水浒传的管理后台功能
    1.完成游戏桌列表的获取
    2.霍城游戏桌的更新和删除
    3.完成游戏桌的新增

    体会:现在的管理后台的代码所在结构上是有点混乱的,一个类里面的功能太多,代码上千行,
    对于维护很不方便,这次在增加水浒传的功能时,分离了功能,所有关于这个游戏代码在单独的类
    文件里面写,类的功能简单,代码少,以后维护起来也容易,建议管理后台的代码要以游戏来划分代码,每个类功能精简专一,而不是
    以现在的大的功能模块来划分。

    明日计划
    1.获取桌上的会员清单
    2.获取桌上的数据信息
    3.清零桌上的会员清单
    4.获取桌上的游戏结果信息清单


    今天在做水浒传的管理后台功能
    1.完成获取桌上的会员清单
    2.完成获取桌上的数据信息
    3.完成清零桌上的会员清单
    4.和游戏那边的数据库实体类进行了统一

    体会:今天功能上开发的少,很多时间花费在了交流上,有些数据库方面的表游戏方面和管理后台方面的定义的不一致
    到后期势必会引起融合的问题,在游戏设计方面,没有形成一个相对固定的文档,导致在管理后台和游戏那边在一些
    基础的问题上没有达成一致。在开发中一有修改,导致多方都要修改,很麻烦。最好在详细设计的时候,在一些类上
    保持一致,不要随便修改,即便要修改也一定要告知其他相关开发,以免后期的大的改动。设计文档最好详细,多方都要
    用到的文档,一定要一起设计,确定下来。

    明日计划
    1.获取桌上的游戏结果信息清单
    2.游戏运行统计
    3.调试之前的代码


    今天在做水浒传管理后台
    1.完成获取桌上的游戏结果信息清单
    2.重构了下之前写代码,消除了一些冗余。
    3.修正了开启桌,剩余桌数量的显示错误
    4.增加了开启桌数量的限制

    明日计划
    1.游戏运行统计
    2.代码优化

    今天在做水浒传管理后台
    1.修正添加桌子,桌排序字段始终是0的错误
    2.对之前写的代码进行了部分优化
    3.完成游戏运行统计

    周志
    这周主要是在做水浒传管理后台的功能
    1.水浒传的后台管理 桌子方面的功能完成
    2.配合张贺调试了后台管理中新增加的水浒传的功能。

    体会:水浒传的后台管理功能在编码上工作量不多,主要是对之前的代码的熟悉和对开发过程中的沟通交流。

    下周计划
    1.根据后台管理的需求继续做后台管理的工作
    2.对大厅的代码的阅读和重构


    今天在做水浒传管理后台
    1.添加了桌新增,删除,参数修改,清除数据的操作记录的功能。
    2.协助管理后台客户端做功能大的调试
    3.发现basedao中的update 函数的问题 ,basedao中update函数如果要使用的话,必须加入getseeion().clear(),将
    原有的缓存清除,否则会报异常:a different object with the same identifier value was already associated with the session。

    体会:尽量精简代码,尽量使用hibernate对数据库进行操作,减少繁琐的sql语句和应为实体类的改变而引起的大量的修改
    就像update对象,简单的hibetnate.update(object)就可以解决问题,而不需要很长的sql语句。

    明日计划
    配合张贺做管理后台服务器的工作


    今天在做水浒传管理后台
    1.完成运行统计的功能

    体会:运行数据获取,水浒传和其他的游戏不相同增加了几个字段,选择修改了数据库,但是运行统计的之前代码写
    的太死,开始一直不知道怎么加入新的游戏,后来想到了方法,基本解决了问题,但是代码结构更加的乱了。
    以后写代码还是灵活点,给以后的想不到的扩展留下余地,也不用今天这么费时费力了。

    明日计划
    配合张贺做管理后台服务器的工作


    今天主要在做大厅服务器和水浒传的服务器的通信
    1.对于后台管理客户端做得修改 ,返回给游戏服务器。
    2.梳理大厅服务器和水浒传服务器的通信报文。


    明日计划
    1.大厅服务器和水浒传的服务器的通信继续编写
    2.大厅服务器和水浒传服务器的通信报文文档整理

    今天主要在做大厅服务器和水浒传的服务器的通信
    1.大厅服务器和水浒传服务器的通信基本完成
    2.了解下mina的线程模型
    3.了解 java 虚拟机监控软件jvisualvm
    4.梳理了下大厅服务器的结构


    明日计划
    1.和梁远远那边进行游戏服务器和大厅服务器的通信的调试
    2.学习其他知识

    今天主要在做大厅服务器和水浒传的服务器的通信
    1.完成了大厅服务器对水浒传服务器发送的报文的整理
    2.完成了大厅服务器接收水浒传游戏服务器报文到来的相应功能

    体会:在实际的做的过程中慢慢明白了大厅服务器的结构和相关的功能。大厅服务器相对比较杂,和多方通信,起控制和
    报文转发的功能。连接客户端和游戏服务器。


    周志
    这周主要在做大厅服务器和管理后台客户端,水浒传游戏服务器的功能
    1.完成大厅服务器和管理后台客户端的报文通信的功能,进行了功能的测试
    2.基本完成大厅服务器和水浒传服务器的通信功能
    3.整理了相关通信的文档

    下周计划
    1.和水浒传服务器进行调试
    2.完善大厅服务器和游戏服务器的通信文档
    3.学习新知识

  • 相关阅读:
    @Value不能给静态变量直接赋值问题
    jmeter测试http请求
    SqlServer单步调试
    mysql锁住 Lock wait timeout exceeded; try restarting transaction
    django在model中添加字段报错
    django admin下拉列表不显示值,显示为object的处理
    (原创推荐文章)kerberos服务器端与客户端
    kafka安装与测试
    Linux shell判断文件和文件夹是否存在
    df -h 卡死 如何解决
  • 原文地址:https://www.cnblogs.com/f-g-k/p/5020052.html
Copyright © 2011-2022 走看看