Tag: socket.io

用Node.js编写JSON

我试图在json文件中推名称。 我正在尝试做类似的事情: socket.on('create json', function(data){ var data = JSON.stringify(Data, null, 2); fs.writeFile('participants.json', data) console.log(data); }); 这只是输出我发送和结果的数据: { "type": "Buffer", "data": [34,69,120,97,109,112,108,101,32,110,97,109,101, 34 ] } 当我写文件时,它会删除所有内容并将其放入。我正在寻找一种写法: { "names":["name1", "name2", "name3"] } 任何想法如何解决和写这个? 非常感谢帮助!

Socket.io客户端事件侦听器在服务器重新启动并重新连接后不侦听

Socket.io客户端很好地工作,直到服务器断开/重新启动。 一旦服务器恢复正常,它就会重新连接,但是当发生事件时,我的所有客户端监听器都不再触发。 网上似乎没有很多,但从我迄今为止阅读的内容来看,这里是我试过的: 将所有.on监听器包装在一个函数中,然后每次客户端库重新连接/连接时调用该函数。 把我所有的io实例包装在一个函数中,每次我调用它时都会返回一个新的实例。 跟踪服务器上的所有房间,然后重新连接所有房间。 创buildio实例时将'multiplex'设置为false。 这些事情都没有给我带来好运。 这里是最相关的github问题,没有答案: https : //github.com/socketio/socket.io/issues/1633 看起来,因为我的客户端上有所有的房间名称,所以我可以在不使用Redis之类的情况下重新连接这些房间。 谢谢。 更新:经过一天的尝试许多不同的策略,似乎为每个命名空间创build.on('连接',Fn)侦听器将使客户端和服务器重新正确连接 io.of('namespace').on('connection', function(){ console.log("namespace connected") }); 如果你没有这个,socket.io仍然可以正常工作和连接,但是它不会与正在工作的客户端监听器重新连接。 我想这应该是在图书馆更新的东西。 无论如何,关于我的特殊问题,我仍然留下一个问题: 我需要能够处理dynamic命名空间 io.of('namespace-<id>').on('connection', function(){ console.log("namespace id: <id> connected") }); 如果我有通配符支持,比如 io.of('namespace-*').on('connection', function(){ console.log("namespace id: <id> connected") }); 完全适合我的情况。 我浏览过不同的图书馆,例如: https://www.npmjs.com/package/socket.io-events 但它只支持事件的通配符和正则expression式,而不支持命名空间。

除非全局声明,否则不能从事件处理函数中的函数更新variables

我有一个nodejs后端应用程序,利用mongoose的数据库连接和查询,在这种情况下,在socket.io,即io.on("connection", [callback])的事件处理程序中执行 然而,每当我在一个事件处理程序的io.on("connection") ,如socket.on("myEvent", [callback])运行一个查询时更新后处理程序中的variables – 特别是当它mongoose查询的callback。 在某些情况下,inheritance人和我试图运行的例子: io.on("connection", function(socket) { var myVar; // declare user within event handler scope socket.on("myEvent", function(m) { var query = m.myQuery; User.findOne({query}, function(err, doc) { if (err) { // error handling } else { myVar = doc; console.log(myVar); // logs whole document as it should } }); socket.on("myOtherEvent", function(m){ […]

游戏中的大滞后node.js和socket.io(实时)

我有一个与socket.io很大的问题,这使得我的实时游戏无法播放。 我希望我的node.js服务器每20ms向每个连接的客户端发送数据(每个套接字) 但是我注意到客户端每20ms收不到一次,每100-200ms多收一次。 这使得游戏完全无法玩(非常大的滞后) 本地它工作得很好。 你能帮我吗 ? 这是我的函数发送数据(服务器端)的一段代码: function sendData() { playersList.forEach( (player) => { let data = []; // code which add data to "data" variable socketsList[player.id].emit('refreshGame', JSON.stringify(data)); }); setTimeout(sendData, 20); } sendData();

用于浏览器和Flash的Node.js和套接字

做一个项目,将来自智能手机的设备定位数据传送到套接字服务器,然后从那里传送到一个Flash应用程序。 现在用nodejs创build一个http服务器并不难,通过浏览器从智能手机连接并通过socket.io传输数据的工作正常。 问题出在闪存,我无法设法连接我的闪存应用程序的HTTP服务器运行socket.io。 我想通过运行一个节点tcp服务器连接从闪存没有问题,但我没有更多的会议pipe理,我不能从浏览器连接了。 我会很高兴有一些想法/build议,真的被困在这里。 谢谢

Socket.IO范围问题(Node.JS)

我正在使用一个node.js项目,我正在使用Socket.IO,并且遇到了一个问题,我正在考虑一个范围界定问题。 这是我正在做的事情: var io = require('socket.io').listen(80); session_manager = require('./includes/session_manager'); // client joins the socket server io.sockets.on('connection', function(client) { client.on('X.Session.join', function(session_id, client) { session_manager.joinSession(session_id, function(err, session) { // do whatever }); }); // BRING IN MORE LISTENERS/EMITTERS? require('someModuleIBuild'); }); 正如你所看到的,我基本上设置了初始连接,通过一个pipe理类join一个会话(所以我知道是谁发出去哪个会话),然后我试图dynamic地引入一些自定义的东西,也将是通过套接字连接发射和侦听。 那么我如何从自定义模块的范围内引用这个当前连接呢? 我所见过的所有例子在一个文件中都具有“开”和“发”function,看起来好像很快就会失去控制。 我可能是过度思考/过分复杂(这是我的第一个node.js项目,第一个基于套接字的项目,第一个主要是JavaScript项目….等),但任何帮助,将不胜感激。

zombie.js和socket.io(node.js)

我想用zombie.js无头浏览器testing我的node.js / socket.io应用程序。 不幸的是,当zombie.js应用程序连接到我的应用程序,它报告负载的连接/断开事件。 例如。 Zombie: Firing timeout 234, delay: 1000 Zombie: GET http://localhost:8000/socket.io/1/?t=1313487267750&jsonp=68 Zombie: GET http://localhost:8000/socket.io/1/?t=1313487267724&jsonp=69 connected connected connected Zombie: Firing timeout 237, delay: 2000 Zombie: Firing timeout 226, delay: 16000 Zombie: Firing timeout 218, delay: 25000 disconnected 看来僵尸不尊重超时延迟,所以我想知道这是否是一个原因? 有没有人试图用socket.io使用僵尸或可以告诉我为什么僵尸似乎立即超时,而不是等待规定的时间?

Socket.io日志(客户端不握手客户端应重新连接)

任何人也面临这个问题呢? 我的日志文件充斥着这个消息: “客户端不握手的客户端应重新连接”和“传输结束”。 我很难重build,因为它不会出现在我用不同的浏览器连接到我的套接字服务器。 但在不同的用户的生活环境,我的日志文件大小增长指数:) 任何人也有这个问题吗?

Socket.io不会向所有连接的套接字发送消息

我正在尝试node.js和socket.io。 我不想使用删除pingfunction,我必须从我的服务器获取更新。 这是我正在做的一个示例代码: var app = require('http').createServer(), io = require('socket.io').listen(app), cp = require('child_process'); app.listen(8080); //I check a global value for all the connected users from the php command line var t = setInterval(function(){ cp.exec('/usr/bin/php /Users/crear/Projects/MandaFree/symfony api:getRemainingMessages', function(err, stdout){ if (err) { io.sockets.emit('error', 'An error ocurred while running child process.'); } else { io.sockets.emit('change', stdout); } […]

如何将消息广播到Socket.IO中某个命名空间的客户端?

以下是来自socket.io网站的示例: var io = require('socket.io').listen(80); var chat = io .of('/chat') .on('connection', function (socket) { socket.emit('a message', { that: 'only' , '/chat': 'will get' }); chat.emit('a message', { everyone: 'in' , '/chat': 'will get' }); }); var news = io .of('/news') .on('connection', function (socket) { socket.emit('item', { news: 'item' }); }); 通常我使用io.sockets.emit(…)向客户端广播数据。 但是如何将消息广播到与命名空间连接的客户端呢? 换句话说,如何将消息发送给订阅了新闻的所有客户端,而不是那些订阅了聊天的订阅者? 更新:我想我知道答案: news.sockets.emit(…); […]