威海的项目 负责socket通信的服务器端代码,与pb的客户端通信。服务器端对每个客户端开一个接收消息的线程,一个发送消息的线程,实时监测数据库中的某个列,查看是否有消息需要发送,服务器端需要实时获得客户端的状态,查看与客户端之间的网络连接状况。
问题1: 当服务器网络异常(比如说网线一旦被拔出了),socket会抛出异常,可以实时监测到网络状况。客户端网线拔出也能实时监测到,但是客户端网线拔了,服务器端 不能监测到当前网络状态。
解决方案 :心跳机制 这个需要自己进一步去了解
目前我自己写得方案是,每隔30秒服务器向每个客户端发出一条消息,这样大概1分钟后对应的接收消息的线程会报异常,捕获这个异常,置指定客户端无效
问题2: 测试阶段发现cpu一直保持在100%,排除出两个地方
1.发送消息的进程,无限循环,查询数据库,系统压力过大。
2.接收消息线程,在读输入流的时候读出-1后继续读,导致无限循环,系统压力过大。
解决方案:1.干掉发送消息的线程,在内存中开一块区域存储指定客户端及其对应的socket(HashMap),在有消息发送的时候再获取socket发
问题1: 当服务器网络异常(比如说网线一旦被拔出了),socket会抛出异常,可以实时监测到网络状况。客户端网线拔出也能实时监测到,但是客户端网线拔了,服务器端 不能监测到当前网络状态。
解决方案 :心跳机制 这个需要自己进一步去了解
目前我自己写得方案是,每隔30秒服务器向每个客户端发出一条消息,这样大概1分钟后对应的接收消息的线程会报异常,捕获这个异常,置指定客户端无效
问题2: 测试阶段发现cpu一直保持在100%,排除出两个地方
1.发送消息的进程,无限循环,查询数据库,系统压力过大。
2.接收消息线程,在读输入流的时候读出-1后继续读,导致无限循环,系统压力过大。
解决方案:1.干掉发送消息的线程,在内存中开一块区域存储指定客户端及其对应的socket(HashMap),在有消息发送的时候再获取socket发

该方法会阻塞直到有输入数据可用、到达文件末尾或出现异常。如果len为0,则不读取任何字节并返回0。如果因为流到达文件末尾而无法读取任何字节,则返回-1。read方法将尝试读取至少一个字节,并将其存储到b数组中。参数包括目标缓冲区b、起始偏移量off和最大读取字节数len。如果在读取过程中遇到IOException,异常会被捕获并视为文件结束,已读取的字节存储到b中并返回读取的字节数。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



