Я как прочитал в нете, пишут , что можно сделать PHP + JS + node.js. Почему с PHP криво будет? Мне не вариант, чтобы вы делали работу т.к.:
1) Я хочу научиться делать сам
2) Мне нужен не только этот чат, там на таком принцепе (мнгновенные сообщения, действия, типа публикация новости) будет много...
Грубо говоря как форум. Создал тему, и переписываються. Только каждый видет свою переписку. Т.е. если ты переписываешься с ТС, то ты какбудто один в этой теме, других сообщений не видешь. А у ТС есть блок с именами пользователей, ну и соотвествено, когда нажимаешь на имя, показываеться переписка с ним, на другое имя, переписка с другим и т.д. И при этом всем, все сообщения приходят мнговенно, как вконтакте, как в ICQ и т.д. Т.е. перезагружать страницу не нужно.
хм. понял.( спасибо!---------- Добавлено 12.08.2013 в 23:00 ----------а если установить куку, и на этой же странице отправить ajax запрос, на другую придут уже куки?---------- Добавлено 12.08.2013 в 23:26 ----------все, разобрался, спасибо!)
<script type="text/javascript"> var token = "'.$token.'"; $("a[href=#reg_restart]").click(function (eventObject) { eventObject.preventDefault(); $("#reg_restart").hide(); $("#reg_error").hide(); form_reg.show(); }); $("a[href=#avt_ok]").click(function (eventObject) { eventObject.preventDefault(); $("#avt_zashita").hide(); form_vxod.show(); }); //Проверка формы авторизации var form_vxod = $("#form_vxod"); //форма авторизации form_vxod.submit(function (eventObject) { eventObject.preventDefault(); var email = $("input[id=vxod_email]"); var pass = $("input[id=vxod_password]"); var error_email_vxod = $("#error_email_vxod"); var error_pass_vxod = $("#error_pass_vxod"); var error_email_vxod_text = error_email_vxod.children(); var error_pass_vxod_text = error_pass_vxod.children(); var error = false; //Проверка Email if(email.val().length > 0) { var regV = /^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9][a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/; var result_email = email.val().search(regV); if (result_email == -1) { email.css({"background" : "#FF9191"}); error = true; error_email_vxod_text.text("Вы ввели некорректный адрес электронной почты. Пример коректнного адреса: name@gmail.com"); error_email_vxod.show(); } else { email.css({"background" : "#FFF"}); error_email_vxod.hide(); } }else{ email.css({"background" : "#FF9191"}); error = true; error_email_vxod_text.text("Введите, пожалуйста, адрес электронной почты."); error_email_vxod.show(); } //Проверка пароля if(pass.val().length < 5){pass.css({"background" : "#FF9191"}); error = true; error_pass_vxod_text.text("Пароль должен состоять минимум из 5 символов."); error_pass_vxod.show();} else{ if(pass.val().search(/^[а-яА-Яa-zA-Z0-9_\@\#\$\%\^\&\?\№\*\!\(\)\-\+\=]{1,}$/)){pass.css({"background" : "#FF9191"}); error = true; error_pass_vxod_text.text("Вы ввели некорректный пароль. Допустимы русские и латинские буквы, цифры и следующие символы: _ @ # $ % ^ & ? № * ! ( ) - + = "); error_pass_vxod.show();} else{pass.css({"background" : "#FFF"}); error_pass_vxod.hide();} } if(error == false) { $("#sumbit_vxod").attr("disabled", true); $.ajax({ url: "/maine/ajax/login_check.php", type: "POST", data: {"email" : email.val(), "password" : pass.val(), "token" : token}, cache: false, success: function(response){ $("#sumbit_vxod").attr("disabled", false); if(response == 0) { form_vxod.hide(); $("#avt_error").show(); } else if(response == 1) { email.css({"background" : "#FF9191"}); error_email_vxod_text.text("Пользователь с данным адресом электроной почты не найден."); error_email_vxod.show(); }else if(response == 2) { pass.css({"background" : "#FF9191"}); error_pass_vxod_text.text("Введенный пароль неверный."); error_pass_vxod.show(); }else if(response == 3) { form_vxod.hide(); $("#avt_zashita").show(); //показываем что нельзя так часто логинится }else if (response == 4) //емаил авторизация { form_vxod.hide(); avt_pin_code_form.show(); }else if (response == 5) //телефон авторизация { ///ПОКА ЕЩЁ НЕТ }else if (response == 6) { location.reload(); //Если все окей } } });//конец запроса } }); var avt_pin_code_form = $("#avt_pin_code_form"); var avt_pin_code_input = $("#avt_pin_code_input").mask("99999", {placeholder:" "}); var error_avt_pin_code = $("#error_avt_pin_code"); var error_avt_pin_code_text = error_avt_pin_code.children(); $("a[href=#avt_restart]").click(function (eventObject) { eventObject.preventDefault(); $("#avt_restart").hide(); $("#avt_error").hide(); form_vxod.show(); avt_pin_code_input.val(""); }); avt_pin_code_form.submit(function (eventObject) { //форма отправки eventObject.preventDefault(); avt_pin_code_input.css({"background" : "#FFF"}); error_avt_pin_code.hide(); var error = false; if(avt_pin_code_input.val().length < 5){ error = true; avt_pin_code_input.css({"background" : "#FF9191"}); error_avt_pin_code_text.text("Вы не ввели PIN-код."); error_avt_pin_code.show(); } if(error == false){ $("#submit_pin").attr("disabled", true); $.ajax({ url: "/maine/ajax/avtorizaciya_pin.php", type: "POST", data: {"avt_pin_code" : avt_pin_code_input.val(), "token" : token}, cache: false, success: function(response){ $("#submit_pin").attr("disabled", false); if(response == 0){ avt_pin_code_form.hide(); $("#avt_error").show();} else if(response == 1){ avt_pin_code_input.css({"background" : "#FF9191"}); error_avt_pin_code_text.text("Неверный PIN-код."); error_avt_pin_code.show(); }else if(response == 2){ avt_pin_code_form.hide(); $("#avt_restart").show(); }else if(response == 3){ location.reload(); //Если все окей } } });//конец запроса } //конец проверки на ошибки }); //конец формы отправки //////////////////////////////////////////////////////////////////////////////////// $("a[href=#ress_pass_restart]").click(function (eventObject) { eventObject.preventDefault(); $("#ress_pass_restart").hide(); $("#ress_pass_error").hide(); form_ress_pass.show(); }); var form_ress_pass = $("#form_ress_pass"); form_ress_pass.submit(function (eventObject) { eventObject.preventDefault(); var email = $("#ress_pass_input"); var error_email = $("#error_ress_pass"); var error_email_text = error_email.children(); var error = false; //Проверка Email if(email.val().length < 1){email.css({"background" : "#FF9191"}); error = true; error_email_text.text("Вы не заполнели поле: адрес электронной почты."); error_email.show();} else{ if(email.val().search(/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9][a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/)){email.css({"background" : "#FF9191"}); error = true; error_email_text.text("Вы ввели некорректный адрес электронной почты. Пример коректнного адреса: name@gmail.com."); error_email.show();} else{email.css({"background" : "#FFF"}); error_email.hide();} } if(error == false){ //$("#submit_ress_pass").attr("disabled", true); $.ajax({ url: "/maine/ajax/ress_password.php", type: "POST", data: {"email" : email, "token" : token}, cache: false, success: function(response){ $("#submit_ress_pass").attr("disabled", false); if(response == 0){ form_ress_pass.hide(); $("#ress_pass_error").show();} else if(response == 1){ email.css({"background" : "#FF9191"}); error_email_vxod_text.text("Пользователь с данным адресом электроной почты не найден."); error_email_vxod.show(); }else if(response == 2){ form_ress_pass.hide(); $("#ress_pass_ok").show(); } } });//конец запроса } }); </script>
Пришлось укоротить:( не влез весь
Я просто думал, может когда запись добовляешь в БД, можно создать какое-нибудь поле со временем, и БД сама удалять будет через час. Ну ладно, сделаю крон, все равно нагрузки толком то и нет...
А вот ещё вопрос, чтобы тему не создавать...
Делаю проект довольно серьезный (по моим меркам), нагруженый. Какому принципу лучше придерживаться: большей таблиц в БД, но в каждой таблице меньше данных, чтобы бд быстрее обращалась... или наоборот лучше будет?
Чаще всего будет 0. А если и больше 0, то не на много...
А на крон можно навешевать по 20-30 скриптов на день? Норм будет? Там точно такая же нагрузка какбудто я в адресной строке запустил скрипт? и не боллее?
Спасибо за советы! Вот ещё, мне нужно организовать аватарки на сайте, многие будут ставить аватарки, нужно их гдето хранить, я придумал так:
Автоматом создавать деректории в папке /avatars/, и каждую директории хранить допустим по 250 картинок. Мне кажиться такой вариант удобен, т.к. не будет милион папок.
В итоге будет такой вид: /avatars/1/1.jpg.........../avatars/1/250.jpg....../avatars/2/253.jpg............
Но есть маленькая проблема, сайт довольно крупный, планируеться большая посещаемости, и когда аватарок будет допустим 100.000, получаеться будет 400 папок. Что тоже уже много.
Помогите подобрать оптимальный вариант количество файлов в 1 папке.
На 1 странице может быть 1-30 аватарок, и все они будут грузиться с тех же папок....
Для сайта планируеться выделеный сервер, для начала примерно такой:
Процессор: 1 x Intel Pentium 4 3.0GHz
Память: 3 x 512 МБ
Диск: 2 x 80 ГБ, SATA
И сразу ещё один вопрос, раз уже про сервы заговорили:) Какую посещаемость примерно потянет такой серв? Учитывая, что впринципе сайт не сильно загружен. На данвере допустим страница грузиться до 2 секунд максимум, а так вообще пол секунды примерно.
На сайте много ajax запросов (пол сайта на них работает, модальные окна)
Спасибо за ответы!
Спасибо большое!
Модальные окна используються по разному. В большенстве случаев в модальном окне есть форма, а далее эта форма отправляеться ajax`сом.
Поэтому это модальное окно имеет не большой html код. Но она также имеет javascript, который обрабатывает форму.
И поэтому если сразу статически генерировать 10 модальных окон, мне кажеться не очень хорошо получаеться, что вроде небольшие 10 форм, но во первых засоряет сильно код, а во вторых ещё получаеться 10 javascript`ов, которые по коду ещё больше форм. В итоге, пользователь на сайте, грузит много лишнего кода каждый раз. А что мне кажеться самое плохое, из-за тогого подхода сильно увеличиваеться DOM дерево, из-за чего (как я думаю) сильно увеличиваеться нагрузка от jQuery. Поэтому 1 вариант не очень с этой стораны:(
Второй вариант плох тем что, во первых будут идти много запросов к серверу, а во вторых пользователю нужно будет ждать некоторое время, пока ajax подгрузит контент.
Также 1 вариант (как по мне) более просто в реализации. Но это не важно...