前面說了socket.io最基本的創建長鏈接,如今簡單說一下多房間聊天。javascript
關鍵點在html
socket.join(roomid)加入一個房間
socket.leave(roomid);離開一個房間
都是寫在服務器上,具體代碼示例以下:
客戶端:
1 <!DOCTYPE html> 2 <html lang="zh-CN"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>socket.io</title> 6 <script type="text/javascript" src="/socket.io/socket.io.js"></script> 7 </head> 8 <body> 9 <h1>socket.io的多房間</h1> 10 <input type="button" value="加入房間" onclick="join()"><br> 11 <input type="button" value="離開房間" onclick="leave()"><br> 12 </body> 13 </html> 14 15 <script type="text/javascript"> 16 17 //和服務器創建長鏈接 18 var socket = io.connect('/'); 19 20 var name = 'tony'; 21 22 //向服務器端發送自定義消息 23 function join(){ 24 socket.emit('join', name); 25 } 26 27 function leave(){ 28 socket.emit('leave', name); 29 } 30 31 //收到有新的人加入房間的信息 32 socket.on('system', function(data){ 33 alert(data) 34 }); 35 //收到我離開的信息 36 socket.on('leavehint', function(data){ 37 alert(data) 38 }); 39 40 41 //和服務器創建長鏈接 42 //socket.on('connect', function(){}); 43 </script>
服務器:前端
1 //初始化系統庫(引包) 2 var express = require('express'); 3 var app = express(); 4 var server = require('http').createServer(application); 5 //引入socket.io這個包 6 var socketio = require('socket.io')(server); 7 var path = require("path"); 8 //加載前端文件index.html 9 10 //設置靜態路徑 11 app.use(express.static(path.join(__dirname, "views"))); 12 app.get('/joinRoom', function(request, response){ 13 response.sendFile('./views/joinRoom.html'); 14 }); 15 16 //監聽用戶鏈接事件 17 socketio.on('connection', function(socket){ 18 //設置房間id(id本身設置,根據具體狀況而定) 19 var roomid = 'room_1'; 20 21 //將用戶加入房間 22 socket.on('join', function(data){ 23 //用戶加入房間 24 socket.join(roomid); 25 //對房間內的用戶發送消息 26 socketio.sockets.in(roomid).emit('system','hello,'+data+'加入了房間');//包括本身 27 //socket.broadcast.to(roomid).emit('event_name', data);//不包括本身 28 }); 29 30 socket.on('leave', function(data){ 31 //用戶離開房間 32 socket.leave(roomid); 33 //向此用戶發送信息 34 socket.emit('leavehint','you are leave!') 35 }); 36 37 }); 38 server.listen(9004);