当前位置: 首页 > 面试题库 >

非基于套接字的Java Server

严峰
2023-03-14
问题内容

老派:我正在使用Java SE 5(或Javav1.5)(请不要告诉我进行升级,因为对于我正在从事的工作[私有],我需要使用此版本的Java )。

我需要设置Web客户端/服务器应用程序的帮助。我在网上寻找的每个变体都缩小了使用websockets /sockets的范围,但是我使用的Java版本还没有套接字。

有没有人有不使用套接字来设置客户端/服务器模型应用程序的教程,或者一些示例代码可以指出正确的方向?

编辑:好的,显然我的Java版本确实有套接字。我会进一步研究。但是,现在我很好奇,如何不使用套接字创建Java服务器?


问题答案:

您需要插座。它们充当连接的端点。虽然,您可以使用其他替代方法来阻止SocketServerSocket实现。

NIO(新IO)使用通道。它允许非阻塞的I / O:

class Server {
     public static void main(String[] args) throws Exception {
          ServerSocketChannel ssc = ServerSocketChannel.open();
          ssc.configureBlocking(false);

          while(true) {
               SocketChannel sc = ssc.accept();

               if(sc != null) {
                    //handle channel
               }
          }
     }
}

使用选择器 (可选,但推荐

您可以使用a Selector在读取/写入/接受之间切换,以仅在无事可做时才进行阻止(以消除过多的CPU使用率)

class Server {
     private static Selector selector;
     public static void main(String[] args) throws Exception {
          ServerSocketChannel ssc = ServerSocketChannel.open();
          ssc.configureBlocking(false);
          Selector selector = Selector.open();
          ssc.register(selector, SelectionKey.OP_ACCEPT);

          while(true) {
               selector.select();

               while(selector.iterator().hasNext()) {
                    SelectionKey key = selector.iterator().next();

                    if(key.isAcceptable()) {
                         accept(key);
                    }
               }
          }
     }

     private static void accept(SelectionKey key) throws Exception {
          ServerSocketChannel channel = (ServerSocketChannel) key.channel();
          SocketChannel sc = channel.accept();
          sc.register(selector, OP_READ);
     }
}

SelectionKey支持通过接受via isAcceptable(),读取via isReadable()和写入via
isWritable(),因此您可以在同一线程上处理所有3个对象。

这是使用NIO接受连接的基本示例。我强烈建议您多加研究,以更好地了解事物的工作方式。



 类似资料:
  • 这是接收文件的服务器代码 这是发送文件的客户端代码

  • 问题内容: 我想创建一个非阻塞连接。像这样: 为此,我使用了另一个线程,无限循环和Linux epoll。像这样(伪代码): 如果我先运行服务器,然后运行客户端,那么一切正常。如果我先运行客户端,请稍等一会儿,再运行服务器,然后客户端将无法连接。 我究竟做错了什么?也许可以做不同的事情? 问题答案: 您应该使用以下步骤进行异步连接: 用创建套接字 开始与 如果返回值既不是也不是,则中止并返回错误

  • 问题内容: 为什么有人会喜欢阻止写而不是非阻止写?我的理解是,仅当您想确保写方法返回后,另一端获得了TCP数据包时,才希望阻止写操作,但是我什至不知道这是可能的。您将必须刷新,而刷新则必须刷新 底层操作系统的写套接字缓冲区 。那么,无阻塞套接字写是否有任何缺点?就性能而言,拥有较大的底层写套接字是否会缓冲一个不好的主意?我的理解是,底层套接字写缓冲区越小,当底层套接字缓冲区已满且isWritabl

  • 本文向大家介绍python 基于TCP协议的套接字编程详解,包括了python 基于TCP协议的套接字编程详解的使用技巧和注意事项,需要的朋友参考一下 基于TCP协议的套接字编程 实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件 模拟ssh远程执行命令(linux系统) 学习最有效的方法一定是有输入,一定要输出,这样学的东西才能真正得有用 以上就是本文的全部内容,希望对大家的学习有所

  • 本文向大家介绍连接到PHP中的非标准MySQL套接字,包括了连接到PHP中的非标准MySQL套接字的使用技巧和注意事项,需要的朋友参考一下 用PHP连接到MySQL数据库通常不是一件容易的事,实际上,这是许多教程首先要做的事情之一。但是,在某些情况下,需要比标准主机,密码和用户名详细信息更多的信息。一个很好的例子是通过不同的(或至少是非标准的)套接字连接到本地MySQL服务器时。在Linux安装中

  • 问题内容: 如何使用正在侦听套接字连接端口的Servlet来实现Web应用程序? 问题答案: 我假设您不是指通过servlet容器免费获得的前门HTTP连接。但是,如果您想添加例如admin服务,则可以创建一个侦听器线程来设置某些全局状态。 servlet。请注意,这不被认为是犹太洁食的(我相信甚至可能违反servlet标准)。