快去请如来佛祖! Socket连接批量发送,只接受第一次

1. 主要困难

因为在客户端进行分批同步时,for循环发送第一次数据同步都正常,但到第二次时就停住了,停在了如下图处

https://img-mid.csdnimg.cn/release/static/image/mid/ask/131485650736185.png

2. 服务端代码

https://img-mid.csdnimg.cn/release/static/image/mid/ask/357363650736114.png

这是上图ServerListen类中的代码

img

3. 客户端核心代码

https://img-mid.csdnimg.cn/release/static/image/mid/ask/101160650736121.png

这是客户端处理服务器响应代码,10s种去读一此。如果有了相应就进行下一次同步

img

经过查询后感觉说是通讯阻塞?我也不是很清楚。流下了没知识的眼泪,MySQL优化,多线程,线程池,怎么学好啊@_@

正儿八经入行1年多,感觉行路难却很有新鲜感。因为稍微难一些的东西都值得研究好久。经过工作需要和考虑,想先学学MySQL优化,多线程,线程池。有好课程记得分享给我 ||_||

可以再开一个线程检查,如果通讯超时,则进行超时处理。这样不会一直阻塞。

ObjectOutputStream 和 ObjectInputStream 的用法有问题。

  • 你可以试试不发送集合类型的对象,或者,
  • 每次发送集合对象的时候都新建一个 ObjectOutputStream 对象进行IO的写入操作。
    相对应的接收端,如果发送端是多个ObjectOutputStream对象进行的发送,接收端也多个ObjectInputStream来读取IO。

数据库优化:

  • 频繁的查询要建立索引,注意复合索引的建立
  • 每个表的索引控制在5个之内
  • 数据量太大的表,想办法进行分表,分表的规则尽量按照日期来划分
  • 如果是集群环境下的数据库,数据的写入负载过大时,可以分库,注意,库可以分开存储,但是,表结构要一致

多线程:

  • 从并发任务开始学起,先用阻塞队列+致命毒药来解决问题
  • 队列会用了,再学互斥量和锁
  • 最后再学习线程同步的其他技术

线程池:

  • 了解线程池的所有参数的用途和适用场景
  • 查看源码,了解线程工厂中的线程是怎样与线程池结合在一起的
  • 查看源码,了解线程池的队列,在线程池工作期间所起的作用
  • 查看源码,了解提交任务时,队列满了之后的几个策略,对编程有帮助