我正在编写一个java程序,需要在整个应用程序运行过程中不断接受序列化对象。这些对象由服务器根据用户的请求发送。
我的主应用程序在其run方法中初始化tcp客户端(扩展线程),但我试图从函数中读取行中的对象。
伪代码如下:
*tcp client extends thread
*global vars: ip, port, socket, oi stream, oo stream, object reference
*run()
make connection
*getObject()
object reference = (object).readobject()
return object
我的主应用程序在更新循环中调用client.getObject()
。可能有或没有物体在等待。
我是以错误的方式解决这个问题吗?
答案 0 :(得分:1)
您是尝试执行“经典”服务器行为还是非阻塞IO?
如果是前者,我建议服务器上的阻塞队列接受传入的请求和一个线程池来处理它们。让服务器分配一个线程来处理请求,直到线程池耗尽为止;排队请求,直到线程被释放并返回到池中。
非阻塞IO完全是另一回事。看看Netty和node.js是如何设计和实施的。
我永远不会有类扩展Thread
- 你不太可能添加重要的新行为。而是实现Runnable
并将其提供给Thread
实例来运行。
答案 1 :(得分:1)
我建议你的run()方法读取所有对象并将它们添加到队列中。
getOject()从队列中获取下一个对象。
您还可以使用int queueLength()
来查看等待的内容。