powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Однопоточный многосокетный клиент
13 сообщений из 13, страница 1 из 1
Однопоточный многосокетный клиент
    #38144632
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.

Не могу найти пример реализации однопоточного неблокирующиего клиента со множеством соединений. Возможно ли реализация онного? Везде приводятся примеры только однопоточных серверов. Не могли кто нибудь привесит принципиальный пример?
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144643
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа такого?
http://www.devx.com/tips/Tip/40931
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144658
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
по ссылке односокетный...
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144662
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит многосокетный и зачем он нужен?
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144664
Фотография Умаксуман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никчто значит многосокетный и зачем он нужен?

наверно тс хочет коннектиться сразу к нескольким серверам для реализации фейловера
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144702
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подозреваю это значит что он хочет в одном потоке делать несколько accept
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144818
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyBlazkowicz,
по ссылке односокетный...
Ну, и какая принципиальная разница для однопоточного клиента?
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144938
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никчто значит многосокетный и зачем он нужен?Нужно несколько соединений к разным серверам в одном потоке. Для этого мне и нужен неблокирующий сокет.

Умаксуманнаверно тс хочет коннектиться сразу к нескольким серверам для реализации фейловераВообще, для задачи реализации сборщика логов с корпоративных мини АТС, которые льют статистику по 23 порту.

Blazkowicz, благодарю за пример.

Вроде бы получилось организовать прием данных с разных серверов в одном потоке вот так
example
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
import java.net.*;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class Client {
	public static void main(String[] ar) throws IOException {

		SocketChannel client = SocketChannel.open();
		SocketChannel client2 = SocketChannel.open();

		client.configureBlocking(false);
		client2.configureBlocking(false);

		client.connect(new InetSocketAddress("127.0.0.1", 25));
		client2.connect(new InetSocketAddress("127.0.0.1", 26));

		Selector selector = Selector.open();

		client.register(selector, SelectionKey.OP_CONNECT
				| SelectionKey.OP_READ | SelectionKey.OP_WRITE);
		client2.register(selector, SelectionKey.OP_CONNECT
				| SelectionKey.OP_READ | SelectionKey.OP_WRITE);

		while (selector.select() > 0) {

			Set<SelectionKey> keys = selector.selectedKeys();
			Iterator<SelectionKey> i = keys.iterator();

			while (i.hasNext()) {

				SelectionKey key = (SelectionKey) i.next();

				i.remove();

				SocketChannel channel = (SocketChannel) key.channel();

				if (key.isConnectable()) {

					System.out.println("Connect " + channel.socket().getPort());

					if (channel.isConnectionPending())
						channel.finishConnect();
				}

				if (key.isReadable()) {
					System.out.println("Read" + channel.socket().getPort());

					ByteBuffer buffer = ByteBuffer.allocate(1000);

					channel.read(buffer);

					buffer.clear();
				}

			}
		}

	}
}

но есть проблема - код грузить процессор на 100%. Хотя согласно документации java docThis method performs a blocking selection operation. It returns only after at least one channel is selected метод Selector.select() должен останавливать поток пока не придут данные по какому либо каналу. Или я не понимаю чего то?
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38144968
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, вроде получилось...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
import java.net.*;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class Client {
	public static void main(String[] ar) throws IOException {

		SocketChannel client = SocketChannel.open();
		SocketChannel client2 = SocketChannel.open();

		client.configureBlocking(false);
		client2.configureBlocking(false);

		client.connect(new InetSocketAddress("127.0.0.1", 25));
		client2.connect(new InetSocketAddress("127.0.0.1", 26));

		Selector selector = Selector.open();

		client.register(selector, 
				 SelectionKey.OP_READ);
		client2.register(selector, 
				 SelectionKey.OP_READ );

		
		if (client.isConnectionPending())
			client.finishConnect();
		
		if (client2.isConnectionPending())
			client2.finishConnect();
		
		while (selector.select() > 0) {

			Set<SelectionKey> keys = selector.selectedKeys();
			Iterator<SelectionKey> i = keys.iterator();

			while (i.hasNext()) {

				SelectionKey key = (SelectionKey) i.next();

				i.remove();

				SocketChannel channel = (SocketChannel) key.channel();

				if (key.isReadable()) {
					System.out.println("Read" + channel.socket().getPort());

					ByteBuffer buffer = ByteBuffer.allocate(1000);
					
					channel.read(buffer);
					
					buffer.clear();
					
					byte[] bytearr = new byte[buffer.remaining()];
					buffer.get(bytearr);
					
					System.out.println(new String(bytearr));
				}

			}
		}

	}
}

...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38145306
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Google for c10k, netty, vert.x
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38146791
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyВообще, для задачи реализации сборщика логов с корпоративных мини АТС, которые льют статистику по 23 порту.И зачем для нескольких АТС "многосокетный" клиент???
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38147118
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovdalyВообще, для задачи реализации сборщика логов с корпоративных мини АТС, которые льют статистику по 23 порту.И зачем для нескольких АТС "многосокетный" клиент???Уже отказался от этой идеи по нескольким причинам.

Было бы интересно узнать ваши доводы против такого подхода,
ведь в теории такая программа будет сжирать меньше ресурсов ОС и
работать быстрее (не принимаем во внимание многоядерные системы).
Только ко лишь простота реализации?
...
Рейтинг: 0 / 0
Однопоточный многосокетный клиент
    #38147333
Фотография Умаксуман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неужели поток требует столько ресурсов?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Однопоточный многосокетный клиент
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]