我要对服务器进行编程,但是想知道我的想法是否可能。我的程序将在多个端口上输出到多个客户端-每个端口都可以由多个客户端访问。
通常,我会使用线程套接字服务器,但是在这种情况下,我需要它可用于多个端口。我想到的用法是下面一个模糊的伪代码:
x
y
希望这很有道理,您可以看到我正在尝试做的事情。简而言之:侦听选定的端口,根据要连接的端口创建螺纹插座连接。
这是完全可行的,还是我要结束多线程线程套接字服务器?
编辑:更改了措词以更好地反映问题。
一个实例不可能ServerSocket
监听多个端口。您当然可以有多个ServerSocket
。但是,正如您已经知道的,ServerSocket.accept
阻塞。
您可以改用ServerSocketChannel
。它们以类似的方式使用,但不会阻塞。
如果在ServerSocketChannel.accept
调用时没有挂起的连接,则它仅返回null。
您可以与使用Selector
,以使用一组通道和块,直到至少有一个挂起的连接。
我不记得如何使用它们的细节,但这个似乎是一个体面的代码示例。
编辑:这是我自己的示例(伪ish)
Selector selector = Selector.open();
int[] ports = {4000,4001,6000};
for (int port : ports) {
ServerSocketChannel server = ServerSocketChannel.open();
server.configureBlocking(false);
server.socket().bind(new InetSocketAddress(port));
// we are only interested when accept evens occur on this socket
server.register(selector, SelectionKey.OP_ACCEPT);
}
while (selector.isOpen()) {
selector.select();
Set readyKeys = selector.selectedKeys();
Iterator iterator = readyKeys.iterator();
while (iterator.hasNext()) {
SelectionKey key = (SelectionKey) iterator.next();
if (key.isAcceptable()) {
SocketChannel client = server.accept();
Socket socket = client.socket();
// create new thread to deal with connection (closing both socket and client when done)
}
}
}
// tidy up selector and channels
问题内容: 是否可以在一个应用程序中绑定和侦听Linux中的多个端口? 问题答案: 对于您要收听的每个端口,您: 使用创建一个单独的套接字。 将其绑定到适当的端口。 调用套接字,以便它设置一个侦听队列。 那时,您的程序正在侦听多个套接字。为了接受这些套接字上的连接,您需要知道客户端要连接到哪个套接字。就是这样。碰巧的是,我有代码可以完全做到这一点,所以这是一个完整的经过测试的示例,它等待多个套接字
我实现了一个相当简单的服务器,可以处理多个客户端,我首先接受这样的客户端 从我所读到的内容来看,似乎通常会为每个客户端创建一个新线程,但如果有更简单的方法,我真的不认为有必要解决这个问题。我只需要能够在服务器和客户端之间发送和接收消息。 有没有简单的方法 监听传入消息 确定消息来自哪个客户端 解析消息等。 都在一个循环中,而不为每个客户端创建单独的线程?
多个同步服务器 Since you have full control of express instance lifecycle, it's not a problem to create a few multiple simultaneous servers (e.g. both HTTP & HTTPS). Example: 因为你已经可以完全控制express实例的生命周期了,所以创建多个
使用ws,Node.js WebSocket库,可以让多个服务器共享一个HTTP/S服务器。 有可能用socket.io做同样的事情吗?
问题内容: 我正在实现Web服务的客户端(维护Web服务的家伙反应迟钝。。)我使用axis和WSDL2Java生成Java类,并且可以在身份验证服务上调用其登录方法好的,然后获取sessionId(例如z4zojhiqkw40lj55kgtn1oya)。但是,似乎我无法在任何地方将此sessionId用作参数。甚至在登录后直接调用其hasSession()方法也会返回false。我设法通过在此服务
我正试图用Netty开发以下用例: 客户端连接到上的中间服务器(端口 8900)。 客户端将具有配置的处理器请求发送到另一台计算机。 第 3 台计算机根据配置启动处理器。 处理器连接到根据配置中标识的端口(例如端口 8901)启动处理器的同一服务器。 服务器现在根据两者之间共享的匹配唯一哈希绑定客户端和处理器。 将为每个新的客户端连接创建新处理器。 客户端连接不是问题。我有一个处理这些请求的客户端