2011-01-25 4 views
1

Мой клиент не дал мне подробностей относительно характера его приложения. Это может быть быть многопоточным, возможно, это не так. Его сервер обслуживает сообщения SOAP (http-запросы)Как мы можем определить, является ли удаленный сервер многопоточным?

Есть ли какой-либо специальный трюк, чтобы понять, является ли одноранговый однопользовательский или многопоточный?

Я не хочу спрашивать клиента, и у меня нет доступа к его серверу/машине. Я хочу найти его сам.

+4

Почему это имеет значение для вас? – YeenFei

+0

Я действительно забочусь о порядке запросов и производительности функции. – cateof

+0

Кроме того, он может использовать какой-то пул соединений. –

ответ

4

Это не имеет значения. Почему вы считаете, что это важно для вас?

Более полезный вопрос будет:

Может сервер принять несколько одновременных сеансов?

Ответ, вероятно, будет «да, конечно», но это, конечно, можно реализовать сервер, который не способен поддерживать несколько сеансов.

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

Вы задаете этот вопрос, потому что хотите «перекрывать» SOAP-сообщения на одном и том же соединении - другими словами, есть три потока, посылающие запросы, а затем все три ждут ответа? Это не сработает, потому что (как HTTP) запросы и ответные сообщения соединяются вместе для каждого соединения. Вам нужно будет открыть три соединения, чтобы иметь три перекрытых сообщения.

+0

Спасибо за анализ. Вопрос в том, как мы можем найти, может ли сервер принимать несколько одновременных сеансов? – cateof

+1

Просто попробуйте открыть сразу два подключения. Если второй не удастся, вы узнаете. И вы можете выполнить этот тест в одном потоке. – Roddy

0

К сожалению, нет, по крайней мере, не без прямого доступа к компьютеру. Несколько соединений могут управляться одним потоком, однако хорошей новостью является то, что это маловероятно. Большинство серверов используют объединение потоков и назначают поток для соединения при рукопожатии. Есть ли особая причина, по которой вам нужно знать? Если вы, вероятно, собираетесь работать на этом сервере, вы узнаете из первых рук, как это работает.

+0

Если его реализация однопоточная, я также реализую один поток. – cateof

+0

С какой целью? Вы пишете программу, чтобы поговорить с сервером? Вам понадобится только несколько потоков, если вы собираетесь использовать сразу несколько соединений, хотя чаще всего это не обязательно.Только сервер должен беспокоиться о нескольких подключениях, а не о клиенте. – Neil

0

Неважно, если сервер многопоточен или нет. Существуют хорошие и эффективные способы реализации мультиплексирования ввода-вывода без потоков [например, select (2) и т.п.), если это вас беспокоит.

Смежные вопросы