PDA

View Full Version : multiple private chat



H:Shojaei
یک شنبه 25 آبان 1393, 09:12 صبح
سلام...
نمیدونم عنوان مناسبیه یا نه اگه نیست بگید درستش کنم...
بالاخره کار با socket , node.js رو یاد گرفتم ولی طی تمام مراحل یادگیری این تو ذهنم بود که چطور میشه چندین چت خصوصی داشت مثلا تو فیس بوک میشه همزمان با 100 نفر به صورت جداگانه چت کرد و مثالهای دیگه که زیاده...
واسه این نوع چت چه کاری لازمه انجام بشه؟؟
مثلا خودم تو ذهنم اینطوریه که هر چت روی یه port منحصر به فرد اجرا میشه مثلا روی 1000 یه چت داریم روی 1001 یه چت حالا نمیدونم این درسته یا نه!!؟
اگه این نیست چطوره پس؟؟

H:Shojaei
یک شنبه 25 آبان 1393, 11:39 صبح
هر کاربر سمت سرور یه سوکت داره که میتونیم با اون باهاش ارتباط خصوصی داشته باشیم به وسیله ی سرور...
اگر اسم همه کاربرا رو نگه داریم به راحتی میتونیم بگیم که به کدوم کاربر یه مسیج فرستاده بشه با دستور:
users[name].emit('send private message',data);

cups_of_java
یک شنبه 25 آبان 1393, 18:56 عصر
شما اگه از socket.io استفاده کنی تمام این امکانات رو درش میبینی.
هم می تونی با استفاده از channelهای تکی چت های دو نفره درست کنی هم Broadcast کنی هم multicast

H:Shojaei
یک شنبه 25 آبان 1393, 22:52 عصر
خوب همین chanel هایی که میگید رو چطور درست کنم؟؟
این کده منه:
app.js



var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
var users1={};
var users={};
server.listen(8081);


app.get('/', function(req, res){
res.sendfile(__dirname + '/index.html');
});


io.sockets.on('connection', function(socket){
socket.on('send message', function(data,tp){
if(tp==1){
for(user in users1){
users1[user].emit('new message',data);
}
} else{
for(user in users){
users[user].emit('new message',data);
}
}
});
socket.on('new user',function ($data,$tp,callback){
if($data){
if($tp==1){


socket.user=$data;
users1[socket.user]=socket;
var names=[];
for(name in users1){
names.push(name);
console.log(name);
}
for(user in users1){
users1[user].emit('show user',names);
}


} else{
console.log('tp=0000000000000');
socket.user=$data;
users[socket.user]=socket;
var names=[];
for(name in users){
names.push(name);
console.log(name);
}
for(user in users){
users[user].emit('show user',names);
}
}


} else {
callback(false);
socket.emit('err username');
}
});
});



----------------------
index.html:



<html><head> <title>Chat with socket.io and node.js</title> <style> #chat{ height:200px; } </style></head><body> <div id='usern'></div> <div id="chat"></div> <form id="send-message"> <input size="35" id="message"></input><br> <input size="6" id="tp"></input> <input type="submit"></input> </form><br /> <form id="username"> <input size="35" id="name"></input> <input type="submit" value="username send"></input> </form><br /> <form id="username1"> <input size="35" id="name1"></input> <input type="submit" value="username1 send"></input> </form> <div id='err'> </div>

<div id='users'> <form> <input type="submit" value="120"/> </form> <a id='uname1' href="" >user1</a> <a id='uname' href="" >user2</a> </div> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script>
jQuery(function(){ alert($vsuser); var socket = io.connect(); var $messageForm = $('#send-message'); var $messageBox = $('#message'); var $chat = $('#chat'); var $username=$('#username'); var $name=$('#name'); var $username1=$('#username1'); var $name1=$('#name1'); var $usern=$('#usern'); var $err=$('#err'); var $room=$('#tp'); var $uname=$('#uname'); $('a').click(function(e){ alert('fdsafdsa'); }); $messageForm.submit(function(e){ e.preventDefault(); socket.emit('send message', $messageBox.val(),$room.val()); $messageBox.val(''); }); socket.on('new message', function(data){ $chat.append(data + "<br/>"); }); $username.submit(function (e){ e.preventDefault(); socket.emit('new user',$name.val(),0); $name.val(''); }); $username1.submit(function (e){ e.preventDefault(); socket.emit('new user',$name1.val(),1); $name1.val(''); }); socket.on('show user',function($users){ $html=''; for($i=0;$i<$users.length;$i++) { $html+=$users[$i]+' <br> '; } $usern.html($html); }); socket.on('err',function(){ $err.html('errrrrrrrrooooorrrr'); }); }); </script>
</body></html>

بخش کلاینت زیاد مهم نیست بخش سرور یا همون فایل app رو باید چکار کنم که چتهای چند نفره و دو نفره و غیره و غیره داشته باشم؟؟
الآن فقط میدونم چت روم گروهی چطوره و تو همین کدها هم 2 تا گروه دارم که مثلا جدا با هم چت میکنن ولی خیلی سخت شده بخواد همینطوری باشه کدهاش غیر قابل هضم میشه...
ممنون میشم کمک کنید که از بس دنبال این مطالب گشتم دارم میترکم واقعا...

cups_of_java
دوشنبه 26 آبان 1393, 10:12 صبح
اینو بخون (http://stackoverflow.com/questions/11356001/socket-io-private-message)
اینم ببین (https://gist.github.com/dskanth/2634239)

اینم یه مثال کامل (https://github.com/tamaspiros/advanced-chat)

H:Shojaei
سه شنبه 27 آبان 1393, 14:09 عصر
اینو بخون (http://stackoverflow.com/questions/11356001/socket-io-private-message)
اینم ببین (https://gist.github.com/dskanth/2634239)

اینم یه مثال کامل (https://github.com/tamaspiros/advanced-chat)
ممنون ...
من خودم واسه مولتی کست و برود کست یه روش پیدا کرده بودم ولی نمیدونستم درسته یا نه چون کد نویسی زیاد میخواست واسه پیاده سازیش حالا این روش خودمو تو این مثالایی که دادین نمونه اونو دیدم فک کنم این روشه همون روش معموله که استفاده میشه حالا به نظر شما هم همینطوری:

مثلا 3 کاربر با هم و 5 نفر دیگه با هم در حال چت هستن میشن 2گروه
یه پیاده سازی معمولی بدون استفاده از دیتابیس انجام دادم این که مثلا مشخصات گروه 3نفری رو بریزیم تو یه متغیر به نام usergroup1 که یه آرایه از کاربراس و گروه 5 نفری رو هم بریزیم تو یه آرایه به اسم usergroup2 حالا وقتی مثلا یه کاربر پیامی ارسال میکنه اگه از گروه 3 نفری باشه به تمام اعضای usergroup1 پیام ارسال میشه... و همچنین برای گروه 5 نفری به صوت جداگانه و طریقه ارسال هم به این صورت:

for (user in usergroup1)
{
usergroup1[user].emit('new message',msg)
}


همین روش درسته؟؟