Java套接字事件驱动

Java套接字事件驱动,java,events,sockets,Java,Events,Sockets,我有一个通过套接字连接到服务器的客户端。连接后,服务器上发生的每个事件都将发送到所有已注册的客户端 每个客户端都应该接收与事件相关的数据 我只需要实现客户端…这意味着我需要连接到服务器并接收事件的数据 我在考虑做一些事情,比如: this.socket = new Socket(InetAddress.getByName(host), this.socket.connect(socket.getLocalSocketAddress(), SOCKET_TIMEOUT); 然后启动一个线程,在w

我有一个通过套接字连接到服务器的客户端。连接后,服务器上发生的每个事件都将发送到所有已注册的客户端

每个客户端都应该接收与事件相关的数据

我只需要实现客户端…这意味着我需要连接到服务器并接收事件的数据

我在考虑做一些事情,比如:

this.socket = new Socket(InetAddress.getByName(host),
this.socket.connect(socket.getLocalSocketAddress(), SOCKET_TIMEOUT);
然后启动一个线程,在while循环中获取套接字的
InputStream

但我不知道这是否是通过套接字实现事件驱动客户机的最佳方法


是吗?

在事件驱动的环境中,a将产生较低的网络开销,但不会提供可靠性。下面是一篇关于编写数据报套接字客户端和服务器的文章

这通常是通过为客户端生成一个单独的线程来完成的,该线程不断地从流中对read()进行阻塞调用-这样,一旦数据可用,read()调用就会解除阻塞并对其接收到的内容进行操作(“事件激发”),然后返回到阻塞等待下一个事件

这里不一定需要线程,除非客户端必须响应一些其他输入,如GUI事件


然后,假设您正在谈论TCP,从循环中的套接字读取数据,缓冲接收到的数据,直到您拥有完整的应用程序“事件”,并调用应用程序“事件处理程序”。就这么简单。

如果我不生成线程,我的应用程序将被阻止,对吗?我需要不断地读取套接字,这是一个阻塞操作,还是我错了?Thx对于Replyys,它将阻止读取套接字。这不是你想要的吗?Java中还有非阻塞IO framefork,请查看