开发学院

您的位置:首页>教程>正文

教程正文

Socket.IO 名称空间

Socket.IO 名称空间

  Socket.IO允许使用“名称空间”来管理socket,这本质上意味着给socket,分配了不同的端点或路径。

  这是一个很有用的功能,可以最小化资源数量(TCP连接),同时通过引入通信通道之间的隔离,在应用程序中分离关注问题。多个命名空间实际上共享相同的Socket连接,从而节省服务器上的Socket端口。

 名称空间在服务器端创建,客户端通过向服务器发送请求来加入。

缺省名称空间

  如果客户端在连接服务器时未指定名称空间,则根名称空间“/”是默认命名空间,socket对象客户端的所有与服务器建立的连接都将设置为默认命名空间。例如:

var socket = io();

  客户端将连接到默认命名空间。此命名空间连接上的所有事件都将由服务器上的io对象处理。前面的所有示例都是利用默认命名空间与服务器通信。

自定名称空间

  我们可以自定名称空间。要创建自定名称空间,我们可以在服务器端调用函数:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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

var nsp = io.of('/my-namespace');
nsp.on('connection', function(socket){
  console.log('someone connected');
  nsp.emit('hi', 'Hello everyone!');
});
http.listen(3000, function(){
  console.log('listening on localhost:3000');
});

  现在要将客户端连接到此命名空间,您需要向io构造函数调用提供命名空间,以在客户端上创建连接和套接字对象。例如,要连接到上面的命名空间,请使用以下html :

<!DOCTYPE html>
<html>
<head><title>Hello world</title></head>
<script src="/socket.io/socket.io.js"></script>
<script>
 var socket = io('/my-namespace');
 socket.on('hi',function(data){
 document.body.innerHTML = '';
 document.write(data);
 });
</script>
<body></body>
</html>

  这样,当有人连接到这个命名空间,他们就会收到一个hi事件。

namespace_hello.jpg