通过Java套接字连续从服务器向客户端发送一系列数据(浮点数组)的最佳方法是什么?例如,我有一台服务器每1ms产生一次浮点数据,我想将这些数据发送给客户端。我的计划是将此进程放在一个线程(服务器端)中,并将其连续发送给客户端。是否可以通过Java套接字实现这一目标?还是应该在将数据发送到客户端之前先将数据写入文件?
谢谢!
答案 0 :(得分:5)
通过套接字执行此操作应该没有问题。基本上,您在服务器端设置一个线程,以便在提供新集时发送数据。
然后在客户端,设置一个不断监听套接字的线程,在可用时读入和解包数据,将其发布到某个地方,以便客户端的处理代码使用它,然后返回到一个民意调查/睡眠周期,直到服务器发送更多数据。
请确保在客户端提供一个方法,如果套接字关闭(服务器关闭,网络连接等),则终止监听器线程。
答案 1 :(得分:3)
使用简单的套接字编程,这根本不是问题:
InputStream
和OutputStream
请注意,此解决方案的扩展性不是很高,如果需要扩展,则需要使用非阻塞IO(这样您的服务器就不会阻塞所有打开的连接和正在运行的线程)
答案 2 :(得分:1)
只要客户端保持连接打开,您就可以发送数据。
如果您使用的是http,则在每次请求后关闭连接,除非您使用像Comet这样的东西。您可以查看维基百科,但本文可能对Java POV有所帮助: http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp-test.html
更新如果您使用的是基于套接字的常规服务器和设置为具有常量连接的客户端,则可以随时发送数据,只要连接即可开了。它只会被连接的人或网络问题关闭。
但是,如果您使用的是http,那么规则会稍微改变一下,这就是第二段的用途。
答案 3 :(得分:0)
最简单的方法是在客户端/服务器端使用ObjectInputStream / ObjectOutputStream,然后客户端尝试从流中读取。如果没有新数据,则客户端等待,并且一旦服务器发送新数组,客户端就会读取它,处理它,然后再次开始等待。根据客户端的操作,将读数放入一个额外的线程,将数组交给实际的处理方法可能是明智的。