2009-10-26 64 views
2

通过Java套接字连续发送一系列数据(浮点数组)从服务器发送到客户端的最佳方式是什么?例如,我有一台每1ms产生一次浮点数据的服务器,我想将这些数据发送给客户端。我的计划是把这个过程放在一个线程中(服务器端)并不断发送给客户端。是否有可能通过Java套接字实现这一点?还是应该在将数据发送到客户端之前先将数据写入文件?通过Java套接字连续发送数据

谢谢!

回答

5

通过套接字进行此操作应该没有问题。基本上,您在服务器端建立一个线程,以便在提供新套件时发送数据。

然后在客户端,设置一个线程,不断监听套接字,读取并解包数据(如果可用),将其发布到某处以便客户端的处理代码使用它,然后返回到poll /睡眠周期,直到服务器发送更多数据。

只要确保在客户端提供了一个方法,如果套接字关闭(服务器关闭,网络连接等),则会终止侦听器线程。

1

只要客户端保持连接打开,您就可以发送数据。

如果您使用的是http,那么每次请求后连接都会关闭,除非您使用Comet之类的东西。你可以看一下维基百科,但这篇文章可能是从Java POV有所帮助:如果您使用的是常规的基于套接字的服务器和设置为具有恒定连接的客户端 http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp-test.html

更新,你可以随时随地发送数据,只要连接处于打开状态即可。它只会被连接的人或网络问题所关闭。

但是,如果您使用的是http,那么规则会有所变化,这是第二段的内容。

+0

hmmm ... HTTP的默认行为是“连接关闭”:这是一个浏览器行为。 – jldupont 2009-10-26 19:52:55

+0

每个请求都是一个telnet连接,并且当我收到其他请求时,它似乎被web服务器关闭,这是我的理解。 – 2009-10-26 19:54:07

+0

但是从这个问题来看,它没有明确说明我们正在处理浏览器/ Web服务器对,是吗? – jldupont 2009-10-26 19:56:32

0

最简单的方法是在客户端/服务器端使用ObjectInputStream/ObjectOutputStream,然后客户端尝试从流中读取数据。如果没有新的数据,客户端会等待,并且只要服务器发送一个新数组,客户端就会读取它,处理它,然后再次等待。根据客户端的作用,将读数放入一个额外的线程可能是明智的,该线程将数组转换为实际的处理方法。

3

使用简单的socket编程,这是不是在所有问题:

  • 打开服务器和客户端
  • 之间的TCP连接使用的连接InputStreamOutputStream
  • 发送数据关闭的连接任何错误/断开的情况下

请注意,这种解决方案是不是非常可扩展,如果这需要缩放,你会nee d使用非阻塞IO(以便您的服务器不会阻塞所有打开的连接和正在运行的线程)