Текущий архив: 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.038 c