Articles of socket.io 1.0

io.sockets.socket(socket_id).emit() – 没有方法'套接字'

即时通讯运行nodejs服务器+ express + socket.io版本1.0.4和一切工作如预期在我的应用程序,但我只是不能发出消息从服务器端到客户端通过: socket_server.sockets.socket(socket_id).emit("message", data); 当我尝试服务器抛出以下错误: TypeError: Object #<Namespace> has no method 'socket' 但我可以记住,代码工作在我的socket.io 0.7。 /0.8。 项目 我究竟做错了什么? 🙁 我的app.js(nodejs服务器)的一个片段: var express = require('express'); var app = express(); /* Server Start */ var server = app.listen(8080, function() { console.log('Listening on port %d', server.address().port); }); app.set("view options", { layout: false }); app.use(express.static(__dirname + '/public')); app.get('/', […]

socket.io 1.2.1如何在重新连接后解决双重事件

在socket.io的博客中说,在1.2.1版本中 “自述文件修复,以防止在重新连接的示例中的双重事件[@nkzawa]” 我为客户端和服务器下载了1.2.1版本,但是在重新连接之后仍然是两次调用事件。 或者我应该用自述文件做些什么? 我试过这种方式重新连接,它的工作,但我可以用它来生产。 这是不是很方便? socket.disconnect() // remove socket object socket = undefined // connect again socket = io.connect({'forceNew':true}) 正如我所说的是正确的方式,还是有缺点? 更新,添加代码 服务器端代码 socket.on('client_emited', function(data){ socketIO.to('this socket id').emit('server_emitted'); }) 客户端代码 var socket; function connectSocket () { if (!socket) socket = io({'forceNew':true}); else socket.connect(); } socket.on('connect', function(){ console.log('CONNECTED TO SOCKET.IO SERVER. SENDING "client_emited" EVENT'); socket.emit('client_emited'); }); […]

我可以使用nodejs将麦克风audio从客户端传输到客户端吗?

我正在尝试创build一个实时语音聊天。 一旦客户端正在按住一个button并进行通话,我希望通过套接字将声音发送到nodejs后端,然后我想将这些数据传输到另一个客户端。 这里是发件人的客户端代码: socket.on('connect', function() { var session = { audio: true, video: false }; navigator.getUserMedia(session, function(stream){ var audioInput = context.createMediaStreamSource(stream); var bufferSize = 2048; recorder = context.createScriptProcessor(bufferSize, 1, 1); recorder.onaudioprocess = onAudio; audioInput.connect(recorder); recorder.connect(context.destination); },function(e){ }); function onAudio(e) { if(!broadcast) return; var mic = e.inputBuffer.getChannelData(0); var converted = convertFloat32ToInt16(mic); socket.emit('broadcast', converted); } }); 然后服务器获取这个缓冲区并将其传输到另一个客户端(在本例中是同一个客户端) […]

Socket.IO是一个可靠的聊天服务器为大量的用户,如果是的什么是你的堆栈?

我已经阅读了许多关于Socket.IO的博客,并且对它的function印象深刻。 我打算使用它的一个聊天应用程序和普通的用户数量最less的用户,它正在完美的工作。 但在生产networking中使用Socket.IO时是否有任何缺陷? Socket.IO最适合于消息stream量非常大的大型消息系统。 如果是的话,什么是最好的技术堆栈沿着Socket.IO使用,“即使在更多的负载时,100%可靠”。 任何人都已经有了Socket.IO在实现大规模消息传递系统方面的经验。 Stack我想用的是Socket.IO,Redis,Cassandra和MySQL。 到目前为止,我已经经历了许多Socket.IO的例子,许多人试图用不同的方式来做。 有些人使用Array来存储Socket ID,而有些人使用Redis。 我明白,使用Redis将有一定的帮助。 但我不想停在那里。 我想学习Socket.IO应用程序的最佳体系结构。 请build议我一个path。 编辑 对于我来说,最好的堆栈就是一种失败的速度比别人less的东西。

如何使用我的Express 4路由中的socket.io将事件发送到连接的套接字?

这是其他人问的问题,但由于我的Express设置不同,我无法从他们提供的答案中获益。 我已经实现了socket.io,并以简单的方式在我的服务器上工作。 这是如何工作的: 在bin/www : #!/usr/bin/env node var debug = require('debug')('gokibitz'); var app = require('../../server'); app.set('port', process.env.PORT || 3000); var server = app.listen(app.get('port'), function() { debug('Express server listening on port ' + server.address().port); }); var io = require('socket.io').listen(server); io.on('connection', require('../routes/socket.js')); 我所有的路线和其他快速安装在../../server.js 。 var routes = require('./server/routes/index'); var user = require('./server/routes/user'); … app.use('/', routes); app.use('/api/user/', user); […]

如何使用Socket.IO最佳地构buildExpress V4.11 +项目?

我已经使用了最新版本的快速生成器 ( 链接 )来生成样板Express 4.11.2项目。 我试图找出设置Socket.IO 1.3.3的最好方法,在Express框架中,http服务器被移动到它自己的bin/www文件中。 我感到困惑,因为它似乎我需要app.js的快递服务器,在它被导出到bin/www 。 我已经尝试了几个小时的Googlesearch,并没有得到任何东西,似乎Express框架正在移动如此之快,以前的所有文章都过时了。 任何帮助将不胜感激! 我将下面的两个文件包括在内,以便在生成样板快速项目后可以看到我正在处理的内容。 斌/ WWW #!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('Express-Socket:server'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); /** * Create […]

SocketIo.use(function(socket,next)) – 下一步如何捕获或接收它?

我find了使用socket.IO 1. * width express的例子。4.这是一个链接 Everyting完美的作品。 但有一个代码: io.use(function(socket, next) { try { var data = socket.handshake || socket.request; if (! data.headers.cookie) { return next(new Error('Missing cookie headers')); } console.log('cookie header ( %s )', JSON.stringify(data.headers.cookie)); var cookies = cookie.parse(data.headers.cookie); console.log('cookies parsed ( %s )', JSON.stringify(cookies)); if (! cookies[COOKIE_NAME]) { return next(new Error('Missing cookie ' + COOKIE_NAME)); […]

如何将客户端关联的数据存储在socket.io 1.0中

文档说socket.io现在不支持.get .set 是否可以存储客户端关联的数据 io.sockets.on('connection', function (client) { client.on('data', function (somedata) { client['data'] = somedata; }); }); 万一我需要多个节点?

获取客户端当前正在断开连接事件的房间列表

我试图find客户端当前正在断开连接事件的房间列表(closures浏览器/重新加载页面/互联网连接被丢弃)。 我需要它的原因如下:用户进入了几个房间。 其他人也这样做了。 然后他closures浏览器选项卡。 我想通知所有在他离开的房间里的人。 所以我需要在“断开连接”事件中做一些事情。 io.sockets.on('connection', function(client){ … client.on('disconnect', function(){ }); }); 我已经尝试了两种方法,发现他们都是错的: 1)遍历adapter.rooms 。 for (room in client.adapter.rooms){ io.sockets.in(room).emit('userDisconnected', UID); } 这是错误的,因为适配器房间有所有房间。 不仅是我的客户所在的房间。 2)通过客户client.rooms 。 这将返回客户端所在房间的正确列表,但不会返回断开连接事件。 在断开连接时,这个列表已经是空的[] 。 那我该怎么做呢? 我在写这篇文章的时候使用了最新的socket.io:1.1.0

Socket.io命名空间和服务器不共享中间件?

我为我的socket.io/express应用程序创build了一些护照authentication中间件。 看起来像: io.use(function (socket, next) { var data = cookie.parse(socket.handshake.headers.cookie); var sessionID = cookieParser.signedCookie(data['connect.sid'], 'my balonga has a first name'); sessionStore.get(sessionID, function (err, data) { if (err) next(err); socket.handshake.passport = data.passport; next(); }); }); 它工作得很好,但我有一个名称空间,它似乎使用不同的套接字。 这是否意味着我必须为每个名称空间重用我的中间件? 我注意到,我连接到我的命名空间,它调用基础服务器的中间件,然后命名空间,这意味着,如果我在两个地方包括中间件,我做了两个我需要的操作。 我可以在不删除基础层中间件的情况下防止这种情况发生吗? 这些都不是应用程序的破坏者,但它会改变我的架构一点,我担心我会在某个时候authentication差距。 概要: 我必须为每个名称空间重用我的中间件吗? 在连接到名称空间的情况下,是否可以防止在不移除基础层中间件的情况下调用默认名称空间中间件?