-
-
- Class: Server
- new Server(httpServer[, options])
- new Server(port[, options])
- new Server(options)
- server.sockets
- server.engine.generateId
- server.serveClient([value])
- server.path([value])
- server.adapter([value])
- server.origins([value])
- server.origins(fn)
- server.attach(httpServer[, options])
- server.attach(port[, options])
- server.listen(httpServer[, options])
- server.listen(port[, options])
- server.bind(engine)
- server.onconnection(socket)
- server.of(nsp)
- server.close([callback])
- Class: Namespace
- Class: Socket
- socket.id
- socket.rooms
- socket.client
- socket.conn
- socket.request
- socket.use(fn)
- socket.send([...args][, ack])
- socket.emit(eventName[, ...args][, ack])
- socket.on(eventName, callback)
- socket.once(eventName, listener)
- socket.removeListener(eventName, listener)
- socket.removeAllListeners([eventName])
- socket.eventNames()
- socket.join(room[, callback])
- socket.join(rooms[, callback])
- socket.leave(room[, callback])
- socket.to(room)
- socket.in(room)
- socket.compress(value)
- socket.disconnect(close)
- Flag: 'broadcast'
- Flag: 'volatile'
- Event: 'disconnect'
- Event: 'error'
- Event: 'disconnecting'
- Class: Client
- Class: Server
-
服务器
通过暴露 require('socket.io')
。
new Server(httpServer[, options])
httpServer
(http.Server) 服务器结合。(http.Server) the server to bind tooptions
(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
可以加入和离开。这提供了一种方便的方式来广播到一组的 Socket
S(参见 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
。
昵称:
退出
[Ctrl+Enter快捷键提交]
【推荐】Google+滴滴联手打造Android开发工程师课程
【推荐】群英云服务器性价王,2核4G5M BGP带宽 68元首月!
【福利】阿里云免费套餐升级,更多产品,更久时长
· 因苹果规则变更 微信iOS版公众平台赞赏功能被关闭
· 微软宣布Win10迎来原生Linux容器
· 小米6发布:iPhone 7P双摄方案,标配6GB内存,起售价2499元
· 百度与奇瑞达成战略合作 涉及无人驾驶、车辆网等方向
· Snapchat印度挨怼小扎趁机补刀:FB不只为富人服务
» 更多新闻...
· 我为什么鼓励工程师写blog
· 怎么轻松学习JavaScript
· 如何打好前端游击战
· 技术文章的阅读姿势