socket2

 目录

服务器

通过暴露  require('socket.io')

new Server(httpServer[, options])

  • httpServer (http.Server)  服务器结合。(http.Server) the server to bind to
  • options (Object)
    • path (字符串):捕捉路径的名称(/socket.io
    • serveClient (布尔):是否以服务客户端文件(true
    • adapter (适配器):适配器使用。默认为实例  Adapter 附带socket.io这是基于记忆。见  socket.io适配器
    • origins (字符串):允许的起点(*
    • allowRequest (功能):接收给定的信号交换或升级请求作为第一个参数,并且可以决定是否继续或不是一个函数。第二个参数是需要与所决定的信息被称为一个函数:  fn(err, success),其中  success 是一个布尔值,其中假意味着该请求被拒绝,并且ERR是一个错误代码。
    • parser (分析器):解析器使用。默认为实例  Parser 附带socket.io。socket.io分析器

Works with and without new:

var io = require('socket.io')();
// or
var Server = require('socket.io');
var io = new Server();

传递给socket.io同样的选项始终被传递到  engine.io Server 时生成。见engine.io 选项  作为参考。

在这些选项:

    • pingTimeout (Number): how many ms without a pong packet to consider the connection closed (60000)
    • pingInterval (Number): how many ms before sending a new ping packet (25000).

前一个客户端知道服务器不可用了这两个参数将影响延迟。例如,如果底层TCP连接无法正常关闭,由于网络问题,客户可能要等上  pingTimeout + pingInterval 毫秒才能触发 disconnect 事件。

  • transports (Array):传送,以允许连接(['polling', 'websocket'])。

注意:顺序很重要。默认情况下,长轮询连接被首先建立,然后如果有可能升级到WebSocket的。使用['websocket']表示如果无法打开WebSocket连接,则不会有后备

new Server(port[, options])

  • port (number)  端口听(会创建新的 http.Server )
  • options (Object)

见  上面  的可用选项。

new Server(options)

  • options (Object)

见  上面  的可用选项。

server.sockets

    .  (Namespace) (命名空间)

默认(/)的命名空间。

下面是参数的含义:

#### server.serveClient([value])

  • value (布尔)
  • Return Server|Boolean

如果  value 是  true, 则连接的服务器(请参阅  Server#attach)将担任客户端文件。默认为 value是 true。This method has no effect after attach is called. If no arguments are supplied this method returns the current value.

// pass a server and the `serveClient` option
var io = require('socket.io')(http, { serveClient: false });

// or pass no server and then you can call the method
var io = require('socket.io')();
io.serveClient(false);
io.attach(http);

#### server.path([value])

  • value (string)
  • 返回 Server|String

在设置 engine.io 和静态文件的路径。默认为  /socket.io如果没有提供参数,该方法返回当前值。

#### server.adapter([value])

  • value (Adapter)
  • 返回 Server|Adapter

设置适配器  value默认为Adapter的实例,这个对象(that ships with socket.io which is memory based)附带socket.io这是基于记忆。见  socket.io适配器如果没有提供参数,该方法返回当前值。

server.origins([value])

  • value (string)
  • 返回 Server|String

---------------------------------------------------

设置允许的起源  value。默认为任何起源是允许的。如果没有提供参数,该方法返回当前值。

server.origins(FN)

  • fn (功能)
  • 返回 Server

提供了一个函数取两个参数  origin:String 和  callback(error, success),其中  success 是说明产地,是否允许或不允许一个布尔值。

潜在的缺点:

  • 在某些情况下,当无法确定  origin 它可能的值 *
  • 由于此功能会为每个请求执行,建议使这一功能工作,尽可能快
  • 如果  socket.io 被一起使用  Express时,CORS标头将只对受到影响  socket.io 的请求。对于快递可以使用  CORS

server.attach(的HttpServer [,选项])

  • httpServer (http.Server)  服务器连接到
  • options (目的)

附加的  Server 一个实例engine.io上  httpServer 与所提供的  options (任选地)。

server.attach(端口[,选项])

  • port (数字)  端口上侦听
  • options (目的)

附加的  Server 一个实例engine.io用所提供的一种新的http.Server  options (任选地)。

#### server.listen(的HttpServer [,选项])

的同义词  server.attach(的HttpServer [,选项]) 

server.listen(端口[,选项])

的同义词  server.attach(端口[,选项]) 

#### server.bind(发动机)

  • engine (engine.Server)
  • 返回 Server

高级起用。绑定服务器到一个特定的engine.io  Server (或兼容的API)的实例。

server.onconnection(插座)

  • socket (engine.Socket)
  • 返回 Server

高级起用。创建一个新的  socket.io 从传入engine.io(或兼容API)客户端  Socket

server.of(NSP)

  • nsp (串)
  • 返回 Namespace

初始化,并检索给定的  Namespace 由它的路径名标识符  nsp如果命名空间已经被初始化,它立即返回。

server.close([回调])

  • callback (功能)

关闭socket.io服务器。该  callback 参数是可选的,在关闭所有连接将被调用。

VAR服务器= 要求('socket.io ');
VAR PORT    = 3030;
VAR服务器= 要求('HTTP ')。服务器();

VAR IO = 服务器(PORT);

IO。关(); //关闭当前服务器

服务器。听(PORT); // PORT是免费使用
= 服务器(服务器);

server.engine.generateId

覆盖缺省的方法来生成自定义套接字ID。

该函数的调用与一个节点请求对象(http.IncomingMessage)作为第一参数。

IO。发动机。generateId = 函数(REQ){
   返回“自定义:ID: + custom_id ++; //自定义ID必须是唯一的
}

命名空间

表示下一个路径名标识的一个给定的范围连接套接字池(例如:  /chat)。

默认情况下,客户端始终连接到  /

namespace.name

  • (串)

空间标识符属性。

namespace.connected

  • (目的)

的散列  Socket 连接到这个命名空间的对象,通过建立索引  id

namespace.emit(eventName的[,...参数])

  • eventName (串)
  • args

发出一个事件给所有连接的客户端。下面的两个是等价的:

VAR我= 要求('socket.io ')();

IO。发射(“发送到所有连接的客户端事件”); //主命名空间

VAR聊天= 10。的('/聊天');
聊天。发射(“发送给聊天命名空间所有连接的客户端事件”);

namespace.clients(回调)

  • callback (功能)

获取连接到这个命名空间客户端ID列表(在所有节点如适用)。

VAR IO = 要求('socket.io ')();
IO。的('/聊天')。客户端(功能(错误,客户端){
   如果(误差)掷误差;
   。控制台日志(客户端); // => [PZDoMHjiu8PYfRiKAAAF,Anw2LatarvGVVXEIAAAD]
});

这个例子中的命名空间的房间的所有客户端:

VAR IO = 要求('socket.io ')();
IO。的('/聊天')。在('一般')。客户端(功能(错误,客户端){
   如果(误差)掷误差;
   。控制台日志(客户端); // => [Anw2LatarvGVVXEIAAAD]
});

与广播,默认为从默认命名空间(“/”)的所有客户端:

VAR IO = 要求('socket.io ')();
IO。客户端(功能(错误,客户端){
   如果(误差)掷误差;
   。控制台日志(客户端); // => [6em3d4TJP8Et9EMNAAAA,G5p55dHhGgUnLUctAAAB]
});

namespace.use(FN)

  • fn (功能)

寄存器中间件,这是获取为每个传入执行的功能  Socket,并接收作为参数的插座和任选延迟执行到下一个注册的中间件的功能。

通过中间件回调错误作为特殊发送  error 数据包到客户端。

VAR IO = 要求('socket.io ')();
IO。使用(功能(插座,下一个){
   如果(插座。请求。标头。cookie中)返回下一个();
   下一个(新的误差('身份验证错误'));
});

事件:“连接”

  • socket (插座)  套接字与客户端的连接

根据来自客户端的连接触发。

事件:“连接”

的同义词  事件:“连接”

标志:“挥发”

设置该事件数据可能会丢失,如果客户还没有准备好接受,因为网络缓慢或其他问题的信息(或者因为他们通过长轮询连接,并在请求的中间后继事件发射修饰符 - 响应周期)。

IO。易挥发。发射('事件',{一些'数据'}); //客户端可能会或可能不会收到它

标志:“本地”

设置用于随后的事件发射的事件数据将只改性剂  广播  到当前节点(当  Redis的适配器  被使用)。

IO。本地。发射('事件',{一些'数据'});

插座

一个  Socket 是与浏览器客户端交互的基本类。甲  Socket 属于某个  Namespace (默认  /),并使用底层  Client 通信。

应当指出,  Socket 不直接涉及到实际的底层TCP / IP  socket ,它是只有类的名称。

在每一个  Namespace,你也可以定义任意通道(称为  room)的  Socket 可以加入和离开。这提供了一种方便的方式来广播到一组的  SocketS(参见  Socket#to 下文)。

在  Socket 类继承自  EventEmitter本  Socket 类覆盖了  emit 方法,并且不修改任何其他  EventEmitter 方法。这里记录的所有方法,这也表现为  EventEmitter 方法(除了 emit)被实施  EventEmitter的,和文档  EventEmitter 应用。

socket.id

  • (串)

该会话的唯一标识符,是来自于底层  Client

socket.rooms

  • (目的)

串识别房间这个客户是在哈希,按房间名称索引。

socket.client

  • (客户)

参考底层  Client 对象。

socket.conn

  • (engine.Socket)

的引用到底层  Client 传输连接(engine.io  Socket 对象)。这允许访问IO传输层,仍然(大部分)抽象实际的TCP / IP套接字。

socket.request

  • (请求)

返回的参考吸气代理  request 发起底层engine.io  Client有用用于访问请求头如  Cookie 或  User-Agent

socket.use(FN)

  • fn (功能)

寄存器中间件,这是获取为每个传入执行的功能  Packet ,并接收数据包,并有选择地执行延迟到下一个注册的中间件一个函数作为参数。

通过中间件回调错误作为特殊发送  error 数据包到客户端。

VAR IO = 要求('socket.io ')();
IO。在('连接',函数(插座){
   。插座使用(函数(包,旁边){
     如果(在分组公爵=== 真)返回的next();
     下一个(新的错误('不是一个公爵错误')) ;
  });
});

socket.send([...参数] [,ACK])

  • args
  • ack (功能)
  • 返回 Socket

发送一个  message 事件。见  socket.emit(eventName的[,...参数] [,ACK]) 

socket.emit(eventName的[,...参数] [,ACK])

(重写  EventEmitter.emit

  • eventName (串)
  • args
  • ack (功能)
  • 返回 Socket

发出一个事件由字符串名称标识的插座。任何其他参数可以被包括在内。所有序列化数据结构的支持,包括  Buffer

插座。发射('你好','世界');
插座。发射('与二进制',1,'2 ',{ 3 '4 ',5 新的缓冲液(6)});

该  ack 参数是可选的,并会与客户的答案被调用。

VAR IO = 要求('socket.io ')();
IO。上('连接',函数(客户端){
   客户端。发射('事件',{一些'数据'});

  客户。发射('白鼬','TOBI ',函数(数据){
     控制台。日志(数据); //数据将是'活泉'
  });

  //客户端代码
   // client.on( '鼬',函数(姓名,FN){
   // FN( '活泉');
   //});

});

socket.on(eventName的,回调)

(从继承  EventEmitter

  • eventName (串)
  • callback (功能)
  • 返回 Socket

注册给定的事件的新的处理程序。

插座。上('新闻',函数(数据){
   。控制台日志(数据);
});

socket.once(eventName的,收听者)

socket.removeListener(eventName的,收听者)

socket.removeAllListeners([eventName的])

socket.eventNames()

从继承  EventEmitter (与其他方法此处未提及一起)。见Node.js的文件events 模块。

socket.join(房间[,回调])

  • room (串)
  • callback (功能)
  • 返回  Socket 的链接

增加了客户端向  room,以及任选地触发与回调  err 签名(如果有的话)。

IO。上('连接',函数(插座){
   。插座连接('房间237 ',函数(){
     。控制台日志(插座。房间); // [<socket.id>, '房间237']
     IO。至(“237房间”,“一个新的用户已加入的房间”); //广播到每个人在房间
  });
});

的接合室的力学由处理  Adapter 已被配置(见  Server#adapter 上文),默认为  socket.io适配器

为了您的方便,每个插座会自动加入这个ID(请参阅确定一个房间  Socket#id)。这可以很容易地发送广播消息到其它插槽:

IO。在(“连接”,函数(客户端){
   客户端。在(“说给别人”,函数(ID,MSG){
     //发送悄悄话给指定id套接字
     客户端。播出。到(ID)。发射('我的消息',MSG);
  });
});

socket.join(房间[,回调])

  • rooms (阵列)
  • callback (功能)
  • 返回  Socket 的链接

添加客户端的房间列表,火灾任选一个回调  err 签名(如果有的话)。

socket.leave(房间[,回调])

  • room (串)
  • callback (功能)
  • 返回  Socket 的链接

删除从客户端  room,和火灾任选地与一个回调  err 签名(如果有的话)。

客房断线后自动离开。

socket.to(室)

  • room (串)
  • 返回  Socket 的链接

设置该事件将只后继事件发射修饰符  广播  到已加入给客户  room

为了发出多个房间,你可以拨打  to 几次。

VAR IO = 要求('socket.io ')();
IO。上(“连接”,函数(客户端){
   //到一个房间
   的客户端。到(“别人”)。发射(‘事件’,{一些‘数据’});
   //对多个房间
   。客户端至('ROOM1 ')。到('房间2 ')。发射('你好');
});

socket.in(室)

的同义词  socket.to(室)

socket.compress(值)

  • value (布尔值)  是否后续包将被压缩
  • 返回  Socket 的链接

设置该事件数据将仅在随后的事件发射的改性剂  压缩  如果值  true默认值是  true 当你不调用该方法。

socket.disconnect(接近)

  • close (布尔值)  是否关闭底层连接
  • 返回 Socket

断开此客户端。如果收盘值  true,关闭基础连接。否则,它只是断开的命名空间。

标志:“广播”

设置后继事件发射的事件数据只会被修饰语  广播  到每一个插座,但发件人。

VAR IO = 要求('socket.io ')();
IO。上(“连接”,函数(插座){
   插座。广播。发射(“事件”,{一些“数据”}); //每个人都得到它,但发送方
});

标志:“挥发”

设置,如果客户端还没有准备好接受,因为网络缓慢或其他问题的消息(事件数据可能会丢失后继事件发射改性剂,或者是因为他们通过长轮询连接,并在请求的中间 - 响应周期)。

VAR IO = 要求('socket.io ')();
IO。上(“连接”,函数(插座){
   插座。挥发性的。发射(“事件”,{一些“数据”}); //客户端可能会或可能不会收到它
});

事件:“断开”

  • reason (字符串)  断开(客户端或服务器端)的原因

断开时触发。

事件:“错误”

  • error (对象)  错误对象

当错误发生时触发。

事件:“断开”

  • reason (字符串)  断开(客户端或服务器端)的原因

当客户端将被断开解雇(但一直没有离开其  rooms 还)。

这些被保留的事件(与沿  connect,  newListener 和  removeListener),其不能被用作事件名称。

客户

所述  Client 类表示输入的传输(engine.io)连接。一个  Client 可以与许多多重关联  Socket属于不同的S  Namespace秒。

client.conn

  • (engine.Socket)

的引用到底层  engine.io Socket 连接。

client.request

  • (请求)

返回的参考吸气代理  request 发起engine.io连接。有用用于访问请求头如  Cookie 或  User-Agent

 
 
 
好文要顶 关注我 收藏该文  
0
0
 
 
 
« 上一篇:golang (10 语法)
posted @ 2017-04-19 18:46 jay- 阅读(0) 评论(0) 编辑 收藏
 
原文地址:https://www.cnblogs.com/jay--zhang/p/6735062.html