2010-12-14 2 views
2

Чтобы быть более конкретным, я написал сервер с java NIO, и он работает хорошо, после некоторого тестирования я узнал, что по какой-то причине в среднем вызов метода записи SocketChannels занимает 1 мс, метод чтения на с другой стороны, в среднем 0,22 мс.java networking, звонки на запись в среднем на 4 раза больше, чем на чтение, это нормально?

Теперь я думал, что установка значений передаваемого/принимаемого буфера на Socket может немного помочь, но, подумав об этом, все сообщения очень короткие (несколько байтов), и я отправляю сообщение о каждых 2 секунд на одном соединении. Оба отправляемых и принимаемых буферов имеют размер более 1024 байта, поэтому это не может быть проблемой, у меня есть сразу несколько тысяч клиентов.

Теперь я немного устал от этого, это нормально, и если да, то почему?

+0

Поскольку вы используете NIO, я предполагаю, что вы используете селектор и записываете только тогда, когда ключ готов для записи, или вы используете блокирующие вызовы? Не могли бы вы получить образец кода? – Nuoji

ответ

0

Я бы начал с использования Wireshark для устранения переменных.

+0

Он уже использует NIO. Поэтому запись должна просто копировать данные в буфер и позволять стеку TCP/IP справляться со всем остальным. – Darron

+0

Отмечено, идиотизм удален, спасибо. –

0

@Nuoji я использую nonblocikng-IO и да я с помощью селектора, а для того, когда я пишу на канал, я сделать следующее:

Так что я написал во втором абзаце в моем посте верно , я предполагаю, что канал готов для записи в большинстве случаев, поэтому я не устанавливаю сначала набор процентов на запись, а скорее пытаюсь напрямую записать на канал. В случае, если, тем не менее, я не могу писать все на канал (или что-нибудь вообще, если на то пошло), я задал интерес, заданный на клавише для записи (таким образом, в следующий раз, когда я попытаюсь записать на канал, он готов записывать). Хотя в моем тестировании, где я получил результаты, упомянутые в исходном сообщении, это случается очень редко.

И да, я могу дать вам образцы кода, хотя я действительно не хотел никого беспокоить. Какие части, в частности, вы хотели бы видеть, поток селектора или поток записи?