Java Socket长连接读取数据

需求:读取服务端日志,读取到特定的值做特定的操作提示 ,只要开启就一直读取
目前是写的Socket死循环读取,但当特定的值多了之后,再服务端日志中同时出现几个特定的值,那运行效率就会变低,请问这种程序如何设计

2个回答

你现在的这种实现实际是同步阻塞的,肯定是影响性能的,2种方式:
1、如果是线上环境可引入MQ来实现;
2、如果是按现有的模式来做,可以先把数据接收下来立刻转存到本地,然后自己再轮询本地的这些数据进行处理(异步化,尽量不阻塞IO操作),
但是这种实现无法处理数据丢失、发送失败的情况,很难保证一致性。
这种场景就是典型的消息队列的使用场景。

qq_42235984
Peak丶 但这样 发送 和 读取 的效率更低了 因为1是实时读取的 日志一直在输出 多谢您的回答
大约一年之前 回复

还可以考虑下用多线程,比如读取线程保持不变,但是遇到特殊的字符需要特殊处理的地方,重启一个线程去处理,就不会影响读取效率了。
考虑下把特定操作封装成 Runnable 任务,然后用 Java 的线程池调度器,提交自定义的 Runnable 任务给线程。原来的主流程继续读取数据。

qq_42235984
Peak丶 对 现有思路也是这种 但我想看看有没有更好的办法 多谢您的回答
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问