Дайте пару-тройку советов по серверу

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 26.12.2007 (Ср) 15:55

Хакер
потому, что ты ратуеш за компилятор, который дает более быстрый, нативный код. это значит с++, т.к
компилятор ВБ застыл на определенном уровне и не совершенствуется вообще, а компилятор С++ развивается


Мне очень нравится ВБ, но мне намного удобнее писать программы на с++, потому, что есть нормальное(в моем понимании :-) ) наслендование, есть шаблоны. Хотя и на ВБ есть выход из положения.

К тому же есть бесплатные компиляторы с++ и по моему во фрейворк входит компилятор НЕТ(если нет, поправте меня), который тоже бесплатен, а ВБ платное, если ещё продается :(

Разнесение чего по классам? Я наверное уже не удивлюсь, если опять услышу, что классы используются не как классы, а как хрен знает что.

Обычно разносят по классам сущности предметной области программы :-) и как их можно использовать как черт знает что???
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.12.2007 (Ср) 17:32

MS не заставляет. MS не даёт (не оставляет) возможности делать иначе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.12.2007 (Ср) 18:17

Igor_123
Компилятор С++ не даёт более быстрого кода, чем компилятор VB. Просто программист, пищущий на C++ обычно не делает всего-того, что делает VB(например, программист на C++ не расставляет везде SEH-хэндлеры, где выброс исключения в принципе возможен, не проверяет целостность стека после вызове Declare-функций (в C++ их нет, но есть возможность положить адрес кода в переменную xxx и вызвать его как xxx();)).

Поэтому, если перевести VB-код на C++ (именно перевести, а не написать бедный аналог) -- то скорости будут одинаковые.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 26.12.2007 (Ср) 20:34

спорить не буду, т.к. не изучал вопрос генерации кода, то что програмиист не предусматривает обработку ошибок где нужно, это тоже неправильно.

А для проверки скорости работы программы, я использовал да недавнего времени старенький компьютер с селероном 166 и 98 винду, если быстродействие на нем меня устраивало, значит устроит и всех остальных :-)

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

А скорости будут все равно одинаковые, т.к. это натив код и исполнияет его один процессор :-)
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 26.12.2007 (Ср) 21:53

Какое отношение ваш холивар имеет к моему вопросу?
Хакер
Если ты слеп напоминаю:
Какую бд использовать? Как организовать транспортную шину?
#define ROFL 0xDDDD

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.12.2007 (Ср) 21:55

Ну используй MySQL. У неё дуальная лицензия, так что можно использовать свободно при соблюдении определённых условий.

Что ты имеешь ввиду под транспортной шиной?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.12.2007 (Чт) 10:49

Разнесение чего по классам? Я наверное уже не удивлюсь, если опять услышу, что классы используются не как классы, а как хрен знает что.
Разнесение кода. До этого он был в одном модуле размером в полтора мега.
Обычный стек ломается (что за слово такое) не потому что он так устроен, а потому что это кривота проектировщика ПО. Ты как проектировщик можешь и в .NET-приложении породить кривоту, которая даст взломать твоё приложение.
Под "ломается" я имел ввиду например вылет приложения в астрал из-за кривого стека, а не кривых рук. Однако этого не происходит.
Лучший способ понять что-то самому — объяснить это другому.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 04.01.2008 (Пт) 21:00

Хакер
Передача информации и комманд между клиентом и сервером. Лучше как я понял использовать пакеты. Т.е. формировать пакеты данных и переводить в поток байтов, после чего передавать. Как именно лучше это сделать(сформировать пакет, ведь различые данные занимают разное количество байт :) )?
#define ROFL 0xDDDD

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 05.01.2008 (Сб) 5:29

DirectXManiac
Ты ведь можешь придумать любой формат пакета - придумай его таким, чтобы различать пакеты было легко. Например - сначала пусть идёт обязательный заголовок, с общимими характеристиками - размером сообщения, типом сообщения, чексумом сообщения (на всякий случай). На основании этих характиристик программа должна определять, что придёт ей дальше. А можешь сделать по другому.

Я один раз, когда очень нужна была расширяемость, использовал текстовый протокол. Но не XML, а свой собственный, более совершенный (с моей точки зрения) - фигурно-скобочный, с собственным парсером на асме. В условиях моей задачи работало быстро, т.к. в условиях моей задачи размер сообщения был ~ 1 кб, и парсился он за ~ 0.0005 с, что вполне устраивало.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 05.01.2008 (Сб) 16:53

Хакер
Спасибо! С пакетом разобрался... Вопрос такой... Как это дело отправить? И через что лучше отправлять, WinSock, DirectPlay, что то ещё?
P.S. Какой лимит подключение и каждого?
#define ROFL 0xDDDD

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 05.01.2008 (Сб) 16:56

DirectPlay это да, самое оно :lol:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 06.01.2008 (Вс) 2:31

Хакер
Я ж написал. Никогда с ним не имел дела. С винсоком разве что, и то максимум простенький чат, а тут сервер... Вообщем как отправить пакет через винсок, т.е. как структуру загнать в поток байтов, передать, на сервере или клиенте разбить опять в структуру?
#define ROFL 0xDDDD

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 06.01.2008 (Вс) 8:41

Вообщем как отправить пакет через винсок, т.е. как структуру загнать в поток байтов, передать, на сервере или клиенте разбить опять в структуру?
Если структура не содержит строк и массивов переменной длины, то одним вызовом CopyMemory, а если содержит - CopyMemory для каждого члена.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.01.2008 (Вс) 9:06

т.е. как структуру загнать в поток байтов, передать, на сервере или клиенте разбить опять в структуру?

Бедный keks-n. Год назад он потратил кучу времени, чтобы объяснить тебе это. И ты опять задаёшь этот вопрос.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 06.01.2008 (Вс) 13:42

Хакер
Не объяснял, он объяснял про свой протокол, а я так для общего развития...
-----
Ещё просьба, выложи плиз функции libmysqld.dll для коннекта, фетч_роу, квери, нам_ровс... объявления, не могу найти никак
#define ROFL 0xDDDD

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 06.01.2008 (Вс) 13:46

Код: Выделить всё
#define mycall long _stdcall

[
   helpstring("Fire-Lines MySQL Type Library"),
   uuid(9CF794FA-8955-423d-BA67-7455C0F31C60)
]

library MySQLSupport
{


   [
      dllname("libmysql.dll"),
      helpstring("Функции для работы с MySQL")
   ]
   module MySQL
   {
      const long CR_UNKNOWN_ERROR         = 2000;
      const long CR_SOCKET_CREATE_ERROR   = 2001;
      const long CR_CONNECTION_ERROR      = 2002;
      const long CR_CONN_HOST_ERROR      = 2003;
      const long CR_IPSOCK_ERROR         = 2004;
      const long CR_UNKNOWN_HOST         = 2005;
      const long CR_SERVER_GONE_ERROR      = 2006;
      const long CR_VERSION_ERROR         = 2007;
      const long CR_OUT_OF_MEMORY         = 2008;
      const long CR_WRONG_HOST_INFO      = 2009;
      const long CR_LOCALHOST_CONNECTION    = 2010;
      const long CR_TCP_CONNECTION      = 2011;
      const long CR_SERVER_HANDSHAKE_ERR    = 2012;
      const long CR_SERVER_LOST         = 2013;
      const long CR_COMMANDS_OUT_OF_SYNC    = 2014;
      const long CR_NAMEDPIPE_CONNECTION    = 2015;
      const long CR_NAMEDPIPEWAIT_ERROR     = 2016;
      const long CR_NAMEDPIPEOPEN_ERROR     = 2017;
      const long CR_NAMEDPIPESETSTATE_ERROR = 2018;
      const long CR_CANT_READ_CHARSET      = 2019;
      const long CR_NET_PACKET_TOO_LARGE    = 2020;
      const long CR_EMBEDDED_CONNECTION   = 2021;
      const long CR_PROBE_SLAVE_STATUS      = 2022;
      const long CR_PROBE_SLAVE_HOSTS       = 2023;
      const long CR_PROBE_SLAVE_CONNECT     = 2024;
      const long CR_PROBE_MASTER_CONNECT    = 2025;
      const long CR_SSL_CONNECTION_ERROR    = 2026;
      const long CR_MALFORMED_PACKET        = 2027;
      const long CR_WRONG_LICENSE         = 2028;

      const long CR_NULL_POINTER         = 2029;
      const long CR_NO_PREPARE_STMT      = 2030;
      const long CR_PARAMS_NOT_BOUND      = 2031;
      const long CR_DATA_TRUNCATED      = 2032;
      const long CR_NO_PARAMETERS_EXISTS    = 2033;
      const long CR_INVALID_PARAMETER_NO    = 2034;
      const long CR_INVALID_BUFFER_USE   = 2035;
      const long CR_UNSUPPORTED_PARAM_TYPE = 2036;

      const long CR_SHARED_MEMORY_CONNECTION                = 2037;
      const long CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR     = 2038;
      const long CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR      = 2039;
      const long CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR    = 2040;
      const long CR_SHARED_MEMORY_CONNECT_MAP_ERROR         = 2041;
      const long CR_SHARED_MEMORY_FILE_MAP_ERROR            = 2042;
      const long CR_SHARED_MEMORY_MAP_ERROR                 = 2043;
      const long CR_SHARED_MEMORY_EVENT_ERROR           = 2044;
      const long CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR = 2045;
      const long CR_SHARED_MEMORY_CONNECT_SET_ERROR         = 2046;
      const long CR_CONN_UNKNOW_PROTOCOL                = 2047;
      const long CR_INVALID_CONN_HANDLE               = 2048;
      const long CR_SECURE_AUTH                             = 2049;
      const long CR_FETCH_CANCELED                          = 2050;
      const long CR_NO_DATA                                 = 2051;
      const long CR_NO_STMT_METADATA                        = 2052;

      [entry("mysql_affected_rows")   ]   mycall mysql_affected_rows(long hMySQL);
      [entry("mysql_autocommit")      ]   mycall mysql_autocommit(long hMySQL, long lMode);
      [entry("mysql_query")         ]   mycall mysql_query(long hMySQL, LPCSTR sQuery);
      [entry("mysql_init")         ]   mycall mysql_init(long hMySQL);
      [entry("mysql_real_connect")   ]   mycall mysql_connect(long hMySQL, LPCSTR sHostName, LPCSTR sUserName, LPCSTR sPassword, LPCSTR sDBName, int lPort, long unixSocket, long lFlags);
      [entry("mysql_close")         ]   mycall mysql_close(long hMySQL);
      [entry("mysql_store_result")   ]   mycall mysql_store_result(long hMySQL);
      [entry("mysql_errno")         ]   mycall mysql_errno(long hMySQL);

                     // дальше сам
   }
};
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList