Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

На чем лучше писать сервер ?   Найти похожие ветки 

 
dec   (2005-07-09 19:34) [0]

Хочу начать писать почтовый сервер и не знаю, что предпочесть OP или С++.
Требований несколько:
1. Обязательная переносимость между Unix и Windows платформами.
2.Возможность держать одновременно большое количество клиентов ( около 500-1000 ) .
3.Экономное использование системных ресурсов.

Можно ли использовать для таких целей Indy ( Delphi7/Kylix ) или лучше С++ ?


 
Kerk ©   (2005-07-09 19:45) [1]

Ой. А можно и присоединюсь к вопросу?
Только я хочу писать HTTP-сервер. Требования в общем те же, но одновременное число клиентов на порядок поменьше.


 
Soft ©   (2005-07-09 19:49) [2]

Рекомендую скачать исходники PostFix http://www.postfix.org/ и портировать под win32.


 
Soft ©   (2005-07-09 19:52) [3]

Kerk ©   (09.07.05 19:45) [1]
http://apache.dnepr.net/httpd/binaries/win32/apache_1.3.33-win32-x86-no_src.exe

А чем апач не устраивает?


 
Tirex ©   (2005-07-09 19:53) [4]

если
Обязательная переносимость между Unix и Windows
то imho наверное все таки лучше  С++
а насчет 2 и 3 это уж как напишешь


 
Kerk ©   (2005-07-09 19:53) [5]

Soft ©   (09.07.05 19:49) [2]

Это кому?
В любом случае у меня HTTP-сервер весьма специфичный должен получится. Так что легче свой писать, чем что-то переделывать, я думаю. Вот. Еще проблема, что в линуксе опыта программирования у меня почти совсем нет. Так что хотелось бы писать на чем-то под винду, а потом без больших проблем перекомпилить под линух.


 
Anatoly Podgoretsky ©   (2005-07-09 19:58) [6]

Kerk ©   (09.07.05 19:53) [5]
Может тебе подойдет FPC он под обе платформы и еще под ряд других.


 
Tirex ©   (2005-07-09 19:59) [7]

Так что хотелось бы писать на чем-то под винду, а потом без больших проблем перекомпилить под линух.
если знаком с С++ то попробуй писать на QT. Пишешь под win(на VC или Mingw) а потом тот же код без изменений просто перекомпилируешь под Linux.


 
Kerk ©   (2005-07-09 20:10) [8]

Tirex ©   (09.07.05 19:59) [7]
если знаком с С++ то попробуй писать на QT.


с С++ я знаком. Но если не ошибаюсь, QT - это библиотека разных контролов. А http-серверу контролы зачем? :) Если ошибаюсь, прошу поправить. :)


 
АНТИСПАММЕР ©   (2005-07-09 20:20) [9]

// Вспомнил свой пароль после переустановки //

>>если знаком с С++ то попробуй писать на QT. Пишешь под win(на VC или Mingw) а потом тот же код без изменений просто перекомпилируешь под Linux.

Знаком. Дело скорее не в языке, а в эффективности и переносимосит.
Насколько знаю Kylix под *BSD не ставится, а бинарники, скомпиллированые в другой системе не идут. - Наверное С++ (Qt4)

>>Рекомендую скачать исходники PostFix http://www.postfix.org/ и портировать под win32

Портирование не поможет так как : 1. Сервер преимущественно под Unix-системы 2. Протокол будет свой собственный и намного сложнее
POP3/SMTP

>>А чем апач не устраивает?
Есть еще Roxen - он более производительный

>>В любом случае у меня HTTP-сервер весьма специфичный должен получится.
Что за зверь должен получится ?

А что делать с производительностью ? Имел ли кто-то дело с такими системами ?


 
АНТИСПАММЕР ©   (2005-07-09 20:22) [10]

>>  Но если не ошибаюсь, QT - это библиотека разных контролов. А http-серверу контролы зачем?

Не только. Там есть и пара компонентов для высокоуровневой работы с сетью. Но весь протокол нужно будет реализовывать вручную


 
Kerk ©   (2005-07-09 20:31) [11]

АНТИСПАММЕР ©   (09.07.05 20:20) [9]
>>В любом случае у меня HTTP-сервер весьма специфичный должен получится.
Что за зверь должен получится ?


Грубо говоря.
Странички будет генерить сам сервер. Т.е. сервер - некая программа, но работа с ней идет не через командную строку или GUI, а через веб-интерфейс. Естественно можно написать все это на perl и использовать апач. Но перспектива таскать апач вместе со своей программой не радует.

АНТИСПАММЕР ©   (09.07.05 20:22) [10]
Там есть и пара компонентов для высокоуровневой работы с сетью. Но весь протокол нужно будет реализовывать вручную


Угу. Ясно.


 
matt ©   (2005-07-09 20:55) [12]

Kerk ©   (09.07.05 20:31) [11]
хм... а ASP (WebSnap) + IIS(который прилагается почти ко всем виндам) не катят?


 
АНТИСПАММЕР ©   (2005-07-09 20:58) [13]

>> Естественно можно написать все это на perl и использовать апач. >>Но перспектива таскать апач вместе со своей программой не радует.

Есть такая штука как Денвер. В нем apache+php занимает около 1 мб.
А почему бы не использовать TIdHTTPServer ? На www.ritlabs есть бесплатный TinyWebServer (кажется так называется) + его исходники, а для генерации страниц использовать Web-модули ? ИМХО, последнее - 101 способ создания себе проблем, PHP и Perl - лучше всего.


 
TUser ©   (2005-07-09 21:13) [14]

Си существенно переносимее. Если переносимость - главное требование, то плюсы - однозначно.


 
iZEN ©   (2005-07-10 00:05) [15]

Kerk ©   (09.07.05 19:45) [1].

Apache Tomcat - JSP/Servlet-контейнер, тем не менее может использоаться как WEB-сервер в небольшой сети на 100-200 одновременных подключений.
Написан на Java. Исходники открыты. Работает везде, где есть J2SE.
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/RELEASE-NOTES


 
iZEN ©   (2005-07-10 00:12) [16]

Сравнение производительности:
http://www.webperformanceinc.com/library/ServletReport/


 
Kerk ©   (2005-07-10 21:20) [17]

matt ©   (09.07.05 20:55) [12]

Надо чтоб работало в линухе.

АНТИСПАММЕР ©   (09.07.05 20:58) [13]
Есть такая штука как Денвер. В нем apache+php занимает около 1 мб.


iZEN ©   (10.07.05 0:05) [15]
Apache Tomcat


Ну я свой хочу писать! Ну прихоть такая, если хотите.

АНТИСПАММЕР ©   (09.07.05 20:58) [13]
А почему бы не использовать TIdHTTPServer ?


В линух перекомпилится?
==

Кстати, насчет языка... C# - интересный вариант.


 
Soft ©   (2005-07-10 21:36) [18]

>>Kerk ©   (10.07.05 21:20) [17]

А все таки чем PHP+MySQL/FireBird/PostgreSQL не годится? А если еще добавить CGI скриптов на Perl/C++, то совсем оверкил получится.

>>Kerk ©   (10.07.05 21:20) [17]
>>Кстати, насчет языка... C# - интересный вариант.

100% поддержки .NET под Linux нет, та же ситуация как с Wine.

ЗЫ
А что скорость совсем критична? Тогда читать руководства http://www.rfc-editor.org/rfc/rfc1945.txt http://www.rfc-editor.org/rfc/rfc2616.txt , С++ в руки и реализовывай протокол. Для работы с Сокетами напиши свою обертку и работай через нее, для переноса между системами придется переписать только эту оболочку.

А оно тебе надо?


 
Eraser ©   (2005-07-10 21:54) [19]

Если необходимо писать небольшой/средний сервер по-моему Indy достаточно, тем более что полная совместимость с .NET и соотв. VStudio.


 
iZEN ©   (2005-07-10 22:28) [20]

Kerk ©   (10.07.05 21:20) [17].
На Java простой http-сервер пишется в несколько строк.

/*
* Copyright (c) 1996, 1996, 1997 Sun Microsystems, Inc. All Rights Reserved.
* CopyrightVersion 1.1_beta
*/
package examples.classServer;
import java.io.*;
import java.net.*;
/**
* ClassServer is an abstract class that provides the
* basic functionality of a mini-webserver, specialized
* to load class files only. A ClassServer must be extended
* and the concrete subclass should define the getBytes
* method which is responsible for retrieving the bytecodes
* for a class.<p>
*
* The ClassServer creates a thread that listens on a socket
* and accepts  HTTP GET requests. The HTTP response contains the
* bytecodes for the class that requested in the GET header. <p>
*
* For loading remote classes, an RMI application can use a concrete
* subclass of this server in place of an HTTP server. <p>
*
* @see ClassFileServer
*/
public abstract class ClassServer implements Runnable {
  private ServerSocket server = null;
  private int port;
  /**
   * Constructs a ClassServer that listens on port and
   * obtains a class"s bytecodes using the method getBytes.
   *
   * @param port the port number
   * @exception IOException if the ClassServer could not listen
   *            on port.
   */
  protected ClassServer(int port) throws IOException {
      this.port = port;
      server = new ServerSocket(port);
      newListener();
  }
  /**
   * Returns an array of bytes containing the bytecodes for
   * the class represented by the argument path.
   * The path is a dot separated class name with
   * the ".class" extension removed.
   *
   * @return the bytecodes for the class
   * @exception ClassNotFoundException if the class corresponding
   * to path could not be loaded.
   * @exception IOException if error occurs reading the class
   */
  public abstract byte[] getBytes(String path) throws IOException, ClassNotFoundException;
  /**
   * The "listen" thread that accepts a connection to the
   * server, parses the header to obtain the class file name
   * and sends back the bytecodes for the class (or error
   * if the class is not found or the response was malformed).
   */
  public void run() {
      Socket socket;
      // accept a connection
      try {
          socket = server.accept();
      } catch (IOException e) {
          System.out.println("Class Server died: " + e.getMessage());
          e.printStackTrace();
          return;
      }
      // create a new thread to accept the next connection
      newListener();
      try {
          DataOutputStream out = new DataOutputStream(socket.getOutputStream());
          try {
              // get path to class file from header
              DataInputStream in = new DataInputStream(socket.getInputStream());
              String path = getPath(in);
              // retrieve bytecodes
              byte[] bytecodes = getBytes(path);
              // send bytecodes in response (assumes HTTP/1.0 or later)
              try {
                  out.writeBytes("HTTP/1.0 200 OK\r\n");
                  out.writeBytes("Content-Length: " + bytecodes.length
                      + "\r\n");
                  out.writeBytes("Content-Type: application/java\r\n\r\n");
                  out.write(bytecodes);
                  out.flush();
              } catch (IOException ie) {
                  return;
              }
          } catch (Exception e) {
              // write out error response
              out.writeBytes("HTTP/1.0 400 " + e.getMessage() + "\r\n");
              out.writeBytes("Content-Type: text/html\r\n\r\n");
              out.flush();
          }
      } catch (IOException ex) {
          // eat exception (could log error to log file, but
          // write out to stdout for now).
          System.out.println("error writing response: " + ex.getMessage());
          ex.printStackTrace();
      } finally {
          try {
              socket.close();
          } catch (IOException e) {}
      }
  }
  /**
   * Create a new thread to listen.
   */
  private void newListener() {
      (new Thread(this)).start();
  }
  /**
   * Returns the path to the class file obtained from
   * parsing the HTML header.
   */
  private static String getPath(DataInputStream in) throws IOException {
      String line = in.readLine();
      String path = "";
      // extract class from GET line
      if (line.startsWith("GET /")) {
          line = line.substring(5, line.length() - 1).trim();
          int index = line.indexOf(".class ");
          if (index != -1) {
              path = line.substring(0, index).replace("/", ".");
          }
      }
      // eat the rest of header
      do {
          line = in.readLine();
      } while ((line.length() != 0) && (line.charAt(0) != "\r")
          && (line.charAt(0) != "\n"));
      if (path.length() != 0) {
          return path;
      } else {
          throw new IOException("Malformed Header");
      }
  }
}


 
Soft ©   (2005-07-10 23:50) [21]

>>iZEN ©   (10.07.05 22:28) [20]

а сколько стоит хостинг java приложений?


 
АНТИСПАММЕР ©   (2005-07-11 03:35) [22]

>> В линух перекомпилится?

В linux (Kylix) должно. Там же те самые версии Indy, что и в Delphi. Но вот в BSD системах - дохлый номер. Хотя бинарники linux"a там вроде бы должны запускаться.

>>А что скорость совсем критична? Тогда читать руководства http://www.rfc-editor.org/rfc/rfc1945.txt http://www.rfc-editor.org/rfc/rfc2616.txt , С++ в руки и реализовывай протокол. Для работы с Сокетами напиши свою обертку и работай через нее, для переноса между системами придется переписать только эту оболочку.

>> а сколько стоит хостинг java приложений?
Таких мой браузер не видел .... :)
Наверное не в пару раз, а на пару порядков больше

Скорость ОЧЕНЬ критична, так как планирую приложение для мощного сервера. И это - не web-сервер, а почтовый на собственном протоколе. Qt думаю использовать.


 
Alex Konshin ©   (2005-07-11 04:54) [23]

У меня тоже один из последних проектов представляет из себя некий хитрый менеджер неких ресурсов, и один из подерживаемых протоколов - HTTP, который используется для управления сервером. И написан он на Java и сделан на основе Socket. То есть, по сути он работает и как webserver, но это у него побочная задача. Из достоинств - работает везде, т.е. он уже реально эксплуатируется и на Windows, и на Sun Solaris. Надежен. Прост в отладке и разработке. Насчет скорости - для этой задачи это было некритично, хотя и не надо считать Java тормозной платформой.


 
iZEN ©   (2005-07-11 15:44) [24]

Soft ©   (10.07.05 23:50) [21].
См. предложение сайта juga.ru.



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.047 c
1-1121242262
k2
2005-07-13 12:11
2005.07.31
Регистрация в реестре с параметром %SystemRoot%


14-1120565584
Vlad Oshin
2005-07-05 16:13
2005.07.31
вторничная задачка. Угадыватель.


1-1121128966
Барс
2005-07-12 04:42
2005.07.31
Как изменить системное время windows


4-1117688968
Strech
2005-06-02 09:09
2005.07.31
Модальные окна


4-1116811498
boalse
2005-05-23 05:24
2005.07.31
Узнать серийный номер винта (не тома)....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский