PDA

View Full Version : ایجاد گفتگوی انلاین



mohammad-gh
یک شنبه 26 شهریور 1391, 21:45 عصر
سایتی دارم به صورت جامعه مجازی
می خوام امکان گفتگوی آنلاین رو بین اعضا اون مشخص کنم
گفتگو بین دو نفر خواهد بود
حداالا مکان می خوام از اسکریپتهای آماده استفاده نکنم

میشه هر کی اطلاعات داره راهنمایی کنه
ممنون

plague
دوشنبه 27 شهریور 1391, 16:49 عصر
دو روش کلی هست یکی استفاده از روش ping که شما برای کسی پیام میفرستی پیام تو دیتابیس ثبت بشه بعد صفحه طرف هر چند ثانیه یک بار با ایجکس دیتابیس رو باید چک کنه که پیامی براش اومده یا نه اگه اومده بود یعنی یکی داره باهاش چت میکنه و پنجره چت باز میشه و اون پیام نمایش داده میشه براش
این روش با ترکیبی از php + ajax انجام میشه و روش درستی هم نیست ولی میشه برای سایت های محدود و کم استفاده ازش استفاده کرد ولی برای شبکه اجتماعی اصلا توصیه نمیشه

روش دوم استفاده از comet یا reverse ajax هستش که در این روش در واقع شما لازم نیست که هرچند ثانیه پیام بفرستی به سرور و دیتابیس رو چک کنید بلکه این سروره که برای شما پیام میفرسته و میگه که پیام اومده که این روش درستیه و شما باید اینو استفاده کنی
تکنولوژی های زیادی برای پیاده سازی این وجود داره من خودم از Node.js استفاده میکنم

mohammad-gh
سه شنبه 28 شهریور 1391, 19:48 عصر
با سلام و تشکر از دوست عز یز
سیستم ما دقیقا یک سیستم جامعه مجازی هست
اگر میشه یه کم بیشتر توضیح بدید در حد یک نمونه کد یا دمو ممنون میشم

plague
سه شنبه 28 شهریور 1391, 20:28 عصر
شما باید برید یه سیستم reverse ajax انتخاب کنید
بعد شروع کنید به یادگیریش وروش کارش بعد پیاده سازی کنید

من دمو بزارم شما چیزی ازش سردرنمیاری چون تکنولوژی مورد استفاده فرق میکنه با دانسته های شما
شما یه اسکریپت میسازی با ایجکس ریورس که درواقع سرور شما هستش و همه پیامن ها به اون ارسال میشه

وقتی کسی پیامی میفرسته برای کسی دیگه این پیام به صورت یک شی json به این اسکریپت سرور میاد که یجورایی مثل مرکز کنترل میمونه
این شی json اگه نمیدونید چیه مثل یه آرایه جاوا اسکریپتی میمونه که توی این مثال حاوی
آیدی ارسال کننده
آیدی دریافت کننده
و متن پیام هستش
بعد ازاینجا برای همه کاربر ها ارسال میشه (البته منظور از برای همه ارسال میشه درواقع برای یک صفحه ارسال میشه و این همه درواقع کسانی هستن که اون صفحه رو باز شده دارن تو مرورگرشون )
پیام به صورت همون شی جیسون برای همه پخش میشه
تو صفحه کاربر ها ما کاربر که صفحه رو باز کرده رو از قبل شناسایی کردیم و میدونیم آیدیش چنده
حالا وقتی پیام میاد ما آیدی دریافت کننده رو از توش میکشیم بیرون و مقایسه میکنیم با آیدی کسی که صفحه رو باز شده داره
در صورتی که یکی بود معلوم میشه که این پیام برای ایشون هست و پیام رو بهشون نمایش میدیم
این روش کلی هستش

اگه از نود استفااده کنی همه عملیات با جاوا اسکریپت / جیکوئری پیاده سازی میشه
تکنولوژی خیلی خوب و جدیدیه ولی تقریبا هیچ منبع فارسی براش گیر نمیاد حتی تو سایت فارسیش !

ای به نمونه سروره که من با نود نوشتم البته این برای آلرت هست مثل بالای فیس بوک که وقتی کسی کامنت یا لایک یا درخواست دوستی میفرسته اون بالا قرمز رنگ میاد ولی کلا طرز کارش با چت یکیه


var app = require('http').createServer()
, io = require('socket.io').listen(app);
app.listen(6666);

io.sockets.on('connection', function (socket) {
console.log("connected");

socket.on('send_alert', function (data) {
socket.broadcast.emit('alert', data);
});


});

tehro0n
چهارشنبه 29 شهریور 1391, 12:47 عصر
شما باید برید یه سیستم reverse ajax انتخاب کنید
بعد شروع کنید به یادگیریش وروش کارش بعد پیاده سازی کنید

من دمو بزارم شما چیزی ازش سردرنمیاری چون تکنولوژی مورد استفاده فرق میکنه با دانسته های شما
شما یه اسکریپت میسازی با ایجکس ریورس که درواقع سرور شما هستش و همه پیامن ها به اون ارسال میشه

وقتی کسی پیامی میفرسته برای کسی دیگه این پیام به صورت یک شی json به این اسکریپت سرور میاد که یجورایی مثل مرکز کنترل میمونه
این شی json اگه نمیدونید چیه مثل یه آرایه جاوا اسکریپتی میمونه که توی این مثال حاوی
آیدی ارسال کننده
آیدی دریافت کننده
و متن پیام هستش
بعد ازاینجا برای همه کاربر ها ارسال میشه (البته منظور از برای همه ارسال میشه درواقع برای یک صفحه ارسال میشه و این همه درواقع کسانی هستن که اون صفحه رو باز شده دارن تو مرورگرشون )
پیام به صورت همون شی جیسون برای همه پخش میشه
تو صفحه کاربر ها ما کاربر که صفحه رو باز کرده رو از قبل شناسایی کردیم و میدونیم آیدیش چنده
حالا وقتی پیام میاد ما آیدی دریافت کننده رو از توش میکشیم بیرون و مقایسه میکنیم با آیدی کسی که صفحه رو باز شده داره
در صورتی که یکی بود معلوم میشه که این پیام برای ایشون هست و پیام رو بهشون نمایش میدیم
این روش کلی هستش

اگه از نود استفااده کنی همه عملیات با جاوا اسکریپت / جیکوئری پیاده سازی میشه
تکنولوژی خیلی خوب و جدیدیه ولی تقریبا هیچ منبع فارسی براش گیر نمیاد حتی تو سایت فارسیش !

ای به نمونه سروره که من با نود نوشتم البته این برای آلرت هست مثل بالای فیس بوک که وقتی کسی کامنت یا لایک یا درخواست دوستی میفرسته اون بالا قرمز رنگ میاد ولی کلا طرز کارش با چت یکیه


var app = require('http').createServer()
, io = require('socket.io').listen(app);
app.listen(6666);

io.sockets.on('connection', function (socket) {
console.log("connected");

socket.on('send_alert', function (data) {
socket.broadcast.emit('alert', data);
});


});

خوب برای همین نمونه ات مثالش رو باز کن که متوجه بشیم
الان تو این مثال چه چیزهایی رو میشه گفت ثابت خواهند بود؟ و چه چیزهایی متغیر؟
مثلا http تو این مثال ثابت است؟
listen(app) چیه؟ جای دیگه app رو تعریف کردی؟ اون عدد 6666 چیه! و غیره
نمونه ساده که حداقل تابع ها همگی باشند آدم بدونه چی به چی شده

plague
چهارشنبه 29 شهریور 1391, 17:19 عصر
هدف آموزش نبود از گزاشتن این کد و همونطور که گفتم تکنولژی بکار رفته فرق میکنه و حتی اگه من کد هم بزارم و توضیح هم بدم کد رو متوجه نمیشیدچون از پایه کار بی اطلاع هستید
فقط چون گفتن نمونه بزار من هم گزاشتم
زبون به کار رفته توی این کد php نیست و جاو اسکریپتنه
اما در مورد سوال هاتون
1 - http گفته شده

require('http')
که نمونه این دستور رو توی پی اچ پی هم داریم
واضحه که http یه کتابخونه یا فایل خارجیه که ما داریم ضمیمه و اینکلود میکنیم تو کدمون
2 -app درخط اول و اولین قسمت کد تعریف شده listen یه تابعه و 6666 هم شماره پورتیه که روی اون سرور به گوش میاسته

این کل سروره و چیز دیگه ای نداره

tehro0n
چهارشنبه 29 شهریور 1391, 18:05 عصر
هدف آموزش نبود از گزاشتن این کد و همونطور که گفتم تکنولژی بکار رفته فرق میکنه و حتی اگه من کد هم بزارم و توضیح هم بدم کد رو متوجه نمیشیدچون از پایه کار بی اطلاع هستید
فقط چون گفتن نمونه بزار من هم گزاشتم
زبون به کار رفته توی این کد php نیست و جاو اسکریپتنه
اما در مورد سوال هاتون
1 - http گفته شده

require('http')
که نمونه این دستور رو توی پی اچ پی هم داریم
واضحه که http یه کتابخونه یا فایل خارجیه که ما داریم ضمیمه و اینکلود میکنیم تو کدمون
2 -app درخط اول و اولین قسمت کد تعریف شده listen یه تابعه و 6666 هم شماره پورتیه که روی اون سرور به گوش میاسته

این کل سروره و چیز دیگه ای نداره

اگر جاوا یا جی کوئری و .. باشه که باز مثالی بیاورید و مانند همین پست بفرمایید اینجا شماره پورته و غیره متوجه میشیم!
من با جی کوئری و .. آشنا هستم، اگه همه فروم ها بخوان بگن برید جستجو کنید که دیگه فروم مفهومی نداره! باز اگه سئوالی بود که او این سایت تکراری باشه میشه گفت..
من جستجو کردم چیزی هم نصیبم نشد، سایر سایت های خارجی هم مشکل داشتند و اومده بودند سئوال پرسیده بودند
حالا شما اگه دوست داشتی نمونه کامل این نوع آلرت رو بگذار که تابعی از قلم نیافتاده باشه، اگه نفهمیدیم هم که هیچ

mohammad-gh
چهارشنبه 29 شهریور 1391, 20:12 عصر
بله واقعا اگر کسی می خواد کمک عملی و جدی کنه جایی بهتر از اینجا نیست
من هم جز موارد خارجی چیزی پیدا نکردم

Yuness Mehdian
چهارشنبه 29 شهریور 1391, 20:41 عصر
دو روش کلی هست یکی استفاده از روش ping که شما برای کسی پیام میفرستی پیام تو دیتابیس ثبت بشه بعد صفحه طرف هر چند ثانیه یک بار با ایجکس دیتابیس رو باید چک کنه که پیامی براش اومده یا نه اگه اومده بود یعنی یکی داره باهاش چت میکنه و پنجره چت باز میشه و اون پیام نمایش داده میشه براش
این روش با ترکیبی از php + ajax انجام میشه و روش درستی هم نیست ولی میشه برای سایت های محدود و کم استفاده ازش استفاده کرد ولی برای شبکه اجتماعی اصلا توصیه نمیشه

روش دوم استفاده از comet یا reverse ajax هستش که در این روش در واقع شما لازم نیست که هرچند ثانیه پیام بفرستی به سرور و دیتابیس رو چک کنید بلکه این سروره که برای شما پیام میفرسته و میگه که پیام اومده که این روش درستیه و شما باید اینو استفاده کنی
تکنولوژی های زیادی برای پیاده سازی این وجود داره من خودم از Node.js استفاده میکنم من قبلا یه چت روم تک نفره با این روش(روش اول) که گفتید درست کردم ولی اسمش رو نمی دونستم . میشه بگید چطوری میشه به client اطلاعات فرستاد ؟ باید از IP کلاینت ها استفاده کرد ؟ یه معرفی بفرمائید ممنون میشم

plague
پنج شنبه 30 شهریور 1391, 04:54 صبح
بستگی به تکنولوژی بکار رفته داره ولی معمولا از socket یا در مورد من از websocket استفاده میشه که یجورایی شبیه به socket معمولی هستن و به عنوان یه جایگزین سوکت برای حل مشکلات موجودش در ضمینه نرم افزار های تحت وب بوجود اومدن

صفحه کلاینت وقتی لود میشه به سروری که برای چت ساختین از طریق سوکت متصل میشید و این وصل شدن مثل احداث یک اتوبان از اون کلاینت به سرور میمونه

mohammad-gh
سه شنبه 30 آبان 1391, 19:02 عصر
دوستان این فروم هم به نتیجه ای نرسید
حداقل یکی یه تکه کد بده عملی بده تا از اون متوجه بشیم چی به چی است!!!

rezaonline.net
سه شنبه 30 آبان 1391, 22:14 عصر
سلام دوستان
شما میتونید توی کلاینت با ای جکس سر تایم مشخصی درخواست بفرستید به سرور و اطلاعات جدید رو بگیرید .

این برنامه رو یکی از دوستان نوشته توی انجمن forum.iranphp.org
هر چی گشتم لینکشو پیدا نکردم اما فایلش توی سیستم بود

اطلاعات دیتابیس رو توی آدرس
core/classes/Core.php
بذارید.
فایل sql هم ایمپورت کنید .
95319

Yuness Mehdian
شنبه 04 آذر 1391, 11:08 صبح
با ایجکس میشه همچین چت رومی نوشت ولی ظاهرا با websocket که plague گفتن خیلی از بار سرور کم میشه ، فرض کنید هم زمان 1000 نفر درحال چت کردن با همدیگه هستن، اگه بخوایم با ajax تو یه زمان معقولی مثل 4 ثانیه از سرور بپرسیم که آیا پیام جدیدی اومده یا نه ، خوب هر چهار ثانیه 1000 درخواست به سمت سرور فرستاده میشه و در صورتی که سرور ضعیف باشه فلج میشه تازه همه این 1000 درخواست ممکنه به جواب نرسن ولی تو حالت websocket وقتی پیام جدیدی واسه cllient ی بخوایم ارسال کنیم نیاز نیست اون کلاینت مدام بپرسه که آیا پیام جدید هست یا خیر در عوضش هر وقت پیام داشته باشه سرور واسش ارسال میکنه . البته من اطلاعاتی در مورد websocket ندارم ولی پیشنهاد میکنم که چت رومتون رو برپایه درخواست های مکرر ajax نسازید چون بنظرم کار اصولی نیست و راه حلش هم که موجوده : websocket فقط کافیه سرچ کنید

mohammad-gh
پنج شنبه 15 فروردین 1392, 00:36 صبح
سلام دوستان
فرض کنیم سیستم چتمون رو با این نوعی و نمونه کدی که شما گذاشتید بنا کردیم
یعنی اطلاعات به دیتابیس فرستاده و از اونجا خونده باشه
با رهم فرض کنیم که ارتباط فقط بین دو نفر باشه
چطور این دو نفر خاص از درخواست گفتگوی همدیگر اطلاع داشته باشند!!!
مثلا فرد 1 به فرد 2 پیغام میده ، بهترین و کم هزینه ترین راه برا خبر دار شدن فرد 2چیه

rezaonline.net
پنج شنبه 15 فروردین 1392, 01:00 صبح
با جاوااسکریپت یه تایمر درست میکنید هر 5 ثانیه یک بار اطلاعات جدید را دریافت و نشان دهد .

pary_daryayi
پنج شنبه 15 فروردین 1392, 07:35 صبح
این برنامه رو یکی از دوستان نوشته توی انجمن forum.iranphp.org
هر چی گشتم لینکشو پیدا نکردم اما فایلش توی سیستم بود


http://forum.iranphp.org/Thread-%DB%8C%DA%A9-%D8%A7%D8%AA%D8%A7%D9%82-%DA%AF%D9%81%D8%AA%DA%AF%D9%88-%DB%8C-%DA%A9%D9%88%DA%86%DA%A9

navid3d_69
پنج شنبه 15 فروردین 1392, 12:41 عصر
اگر می توین برین youtube سرچ کن phpacademy chat اونجا آموزش تصویری روش ajax هست ولی آخرش می گه روش خوبی برای سایت هایی با بازدید بالا یا چت روم نیست بیشتر برای پشتیبانی و اینا بدرد می خوره من comet رو پیشنهاد می کنم مطلب فارسی دربارش نیست

اگر جامعه مجازی درست می کنی از روش ajax با تاید استفاده نکن چون خیلی ها چت می کنن به مشکل می خوری

mohammad-gh
پنج شنبه 15 فروردین 1392, 17:36 عصر
من comet رو پیشنهاد می کنم م
اگر منظورتون node.js و socket.io هست باید بگم ، مختصر تحقیقی در مورد اون کردم
اما باید بگم اجراش تو هاستهای اشتراکی ممکن نیست و باید هاست اختصاصی باشه و چند تا عیب دیگه

mohammad-gh
پنج شنبه 15 فروردین 1392, 17:42 عصر
با جاوااسکریپت یه تایمر درست میکنید هر 5 ثانیه یک بار اطلاعات جدید را دریافت و نشان دهد
میشه بگید چطور!

2undercover
پنج شنبه 15 فروردین 1392, 17:56 عصر
استفاده از این چک کردن هر 5 ثانیه زیاد روش جالبی نیست!ولی اینجوری:
function check_new(){
// Check with Ajax
}
$(document).ready(function(){
setInterval(check_new(),5000);
});


که باعث میشه تابع check_new هر 5 ثانیه اجرا بشه!

navid3d_69
پنج شنبه 15 فروردین 1392, 18:58 عصر
شما جامعه مجازی می خواین راه بندازین روی هاست اشترکی؟ سیستم های جامه مجازی سایت هایی با بازدید بالا هست پشنهاد می کنم روی حداقل vps بزارید و شکی نکنید که اگر هاست اشتراکی داشته باشید با روش تایمر اگر 200 نفر باهم چت کنند احتمال suspend شدن هاست شما زیاد هست

WOLF_MEHRDAD
پنج شنبه 15 فروردین 1392, 20:44 عصر
درود بر شما

مطلب جالبی شد برام چندتا لینک پیدا کردم ، شاید بتونه کمکتون کنه


http://nodetuts.com/
http://ontwik.com/category/nodejs/


موفق باشید

navid3d_69
پنج شنبه 15 فروردین 1392, 21:14 عصر
http://nodejs.ir/
http://www.nodejs.org/api/