Articles of socket.io

Socket.IO:XHR轮询延迟断开连接

我正在使用socket.io和node.js。 我在跟踪哪些用户在线时遇到了问题,因为在socket IO识别出XHR-Polling客户端已断开连接之前的几秒钟的延迟。 如果XHR轮询客户端刷新页面,则他们的新连接消息似乎在其断开连接消息之前。 当试图跟踪哪些用户在线时会造成混淆。 一种解决scheme可能是检测服务器端的传输方法,并延迟XHR轮询客户端的连接,以确保断开连接function先运行。 有没有人有这方面的经验?

Socket.io用于实时应用程序

所以我有几个月前build立的另一个项目。 它目前使用jQuery和Ajax,每30秒调用一次php脚本。 php脚本查询mysql并返回结果显示。 在这个应用程序中,这个人有能力添加/编辑/从数据库中删除logging,当他们从数据库的结果列表需要更新他们看到的列表。 到目前为止,这似乎是工作,但是往下看,数据库将变得更大,并且需要实时更多,这意味着不仅每30秒刷新一次,而且尽可能瞬间更新。 socket.io会是这个答案吗? 我会简单地使用socket.io与nodejs来创build一个服务器,并发出事件来查询我的分贝,并返回结果显示? 那么在客户端就有一个像每秒一样调用服务器套接字脚本的函数? 这是否是使用socket.io的正确途径? 如果这样的话,如果我在服务器资源方面每秒都运行一次,那么这个过程会有一个问题吗?

在node.js中共享一个端口的多个套接字(通过socket.io)

我不知道如何在服务器端同时使用多个套接字的单一端口。 我们如何在node.js中做到这一点 我目前使用的是socket.io,每个端口有一个套接字。 如果解决scheme不存在,但也有可能,那么也请给你的build议,以实现相同的。 如果我们共享一个端口,那么还有什么问题呢? 考虑到客户端可能处于空闲状态,但会占用服务器上的端口,因此我们需要为每个客户端维护套接字连接,其他相关选项可能是什么?

socket.io中最大同时打开的房间

我正在使用node.js,mongodb,socket.io和express来实现聊天服务器。 我想知道的是,是否有最大限度的限制。 同时开放的房间为socket.io多房间聊天。 另外,有没有最大的没有。 的每个房间的用户。

简单地发射的一个套接字和一个易于发射的套接字之间有什么区别?

这是对以下问题的后续问题; 为什么updateSockets()函数接受一个像这样的参数? 在下面的代码中,套接字使用volatile来发射。 var updateSockets = function(data) { // adding the time of the last update data.time = new Date(); console.log('Pushing new data to the clients connected ( connections amount = %s ) – %s', connectionsArray.length , data.time); // sending new data to all the sockets connected connectionsArray.forEach(function(tmpSocket) { tmpSocket.volatile.emit('notification', data); }); }; 如果代码被更改成tmpSocket.emit('notification', data); […]

Socket.io无法将数据发送到客户端的独特空间

我正在使用Node.js创build媒体上传微服务。 该服务通过将上传的二进制数据接收到缓冲区,然后使用S3 npm包上载到S3存储桶来工作。 我试图使用该包中的eventEmitter,它显示上传到S3的数据量,并将其发回到正在上传的客户端(以便他们可以看到上传进度)。 我正在使用socket.io发送进度数据回到客户端。 我遇到的问题是socket.io中的.emit事件将上传进度数据发送给所有连接的客户端,而不仅仅是发起上传的客户端。 据我了解,一个套接字连接到'连接',这是由客户端'ID'镜像的默认房间。 根据官方文档,使用socket.to(id).emit()应该将数据范围只发送到客户端,但这不适合我。 更新示例代码: server.js: var http = require('http'), users = require('./data'), app = require('./app')(users); var server = http.createServer(app); server.listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); var io = require('./socket.js').listen(server); socket.js: var socketio = require('socket.io'); var socketConnection = exports = module.exports = {}; socketConnection.listen = function […]

Socket.io聊天应用程序,也可以发送图像,甚至文件

我最近对Socket.io项目感兴趣,不知道是否有简单的方式发送图像,甚至其他types的文件,而无需使用其他库。 我并不是试图将file upload到服务器来存储,我只是想把它传播给当时在聊天室里的那些人。 所以代码应该是最小的。 然而,我在编码/解码的东西真的很糟糕,所以一些示例代码会很好。

Node.js到Socket.io时间延迟

我正在使用Node.js(v0.12.4)和Socket.io(1.3.2)实时交易应用程序。 在这种情况下,当从Node.js发送到GUI(Socket.Io)的响应时,我面临着几乎(100毫秒)的时间延迟。 我不知道为什么在从Node.js向GUI(Socket.IO)发送数据的时候有延时。 这发生在生产现场。 而且我们也试图在生产服务器位置debugging这也是由于networking延迟。 但是同样的结果。 请任何人帮助我呢?

如何创build一个可重用的Socket.IO模块

我有创build一个暴露我的Socket.IO库function的模块的麻烦: const sio = require('socket.io'); module.exports = function(server) { const io = sio(server); return { register: function(namespace) { let nsp = io.of(namespace); nsp.on('connect', function(socket) { // … } } } } 现在的问题是如何在其他模块中使用这个? 在我的app.js 我使用Express创buildserver ,并可以使用require('./mysocketio')(server)实例化模块,但不能在其他模块中使用,因为服务器在那里不可用。 什么是解决这些循环依赖的好方法?

我在群集的node.js / socket.io / redis pub / sub应用程序中收到重复消息

我正在使用Node.js,Redisstore的Socket.io,Socket.io家伙的Cluster和Redis。 我有一个发布/订阅应用程序,只有一个Node.js节点运行良好。 但是,当负载过重时,由于Node.js不是为多核机器编写的,因此最多只能是服务器的一个核心。 正如你在下面看到的,我现在使用了来自Learnboost的Cluster模块,和使用Socket.io的人一样。 但是,当启动4个工作进程时,每个进入和订阅的浏览器客户端都会获得Redis中发布的每条消息的4个副本。 如果有三个工作进程,则有三个副本。 我猜我需要将redis pub / subfunction以某种方式移动到cluster.js文件。 Cluster.js var cluster = require('./node_modules/cluster'); cluster('./app') .set('workers', 4) .use(cluster.logger('logs')) .use(cluster.stats()) .use(cluster.pidfiles('pids')) .use(cluster.cli()) .use(cluster.repl(8888)) .listen(8000); App.js redis = require('redis'), sys = require('sys'); var rc = redis.createClient(); var path = require('path') , connect = require('connect') , app = connect.createServer(connect.static(path.join(__dirname, '../'))); // require the new redis store var […]