項目需要,所以學習使用node.js +socket.io實現私人交談功能,忙活了大半天終於搞明白了,基本原理就是當server端接收到
socket串連請求的時候,就會每一個建立一個socket,而串連的socket由於沒有表示,所以每一個socket只可以發送給自己資訊,如果要
發送給其他的socket串連資訊需要標識其他的socket串連。
廢話不多說了,上代碼。。
server.js
var io = require('socket.io').listen(8080);io.set('log level', 1);var users = {};io.sockets.on('connection', function (socket) { io.sockets.emit('connect',{hell:'boy'}); socket.on('private message', function (from,to,msg) { console.log('I received a private message by ', from, ' say to ',to, msg);if(to in users){users[to].emit('to'+to,{mess:msg});} }); socket.on('new user',function(data){ if(data in users){ }else{var nickname = data;users[nickname]= socket; } console.info(users); }); socket.on('disconnect', function () { io.sockets.emit('user disconnected'); });});測試頁面index.html
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script src="http://localhost:8080/socket.io/socket.io.js"></script> <script> $(function(){ var socket = io.connect('http://localhost:8080');socket.on('connect', function (data) {console.log(data);}); $("#send").click(function(e){var from = $('#user_name').val(), msg = $('#message').val(), to = $('#to').val(), $message_list = $('#message_list'); socket.emit('new user',from); socket.emit('private message',from,to,msg); socket.on('to'+from, function (data) {$message_list.append(''+data.from+'說'+data.message+'');}); }); }); </script>姓名:
發送給:
訊息內容:發送
項目運行效果:
圖示二:
OK,終於可以私聊了。。。