Tag: socket.io

socket.io JavaScript客户端重新启动服务器后无法重新连接

我使用“socket.io”:“1.4.5”,“socket.io-redis”:“1.0.0”。 使用socket-io-client的javascript客户端似乎很高兴地连接到服务器,除了服务器重新启动时。 连接尝试失败,触发'{“消息”:“xhr轮询错误”,“types”:“TransportError”,“描述”:0“}'消息”connect_error“事件如果我重新启动浏览器连接工作正常。我也注意到,如果我在事件处理程序中为“connect_error”设置了一个断点并等待几秒钟,那么连接尝试最终会成功。我错过了客户端代码中的一个configuration设置? var socketConnectParams = {'max reconnection attempts': 150}; socketConnectParams['reconnection'] = true; socketConnectParams['reconnectionDelay'] = 5000; socketConnectParams['reconnectionDelayMax'] = 15000; var socket = io('http://localhost:8888', socketConnectParams); socket.on('connect', function () { }); socket.on('connect_error', function(error) { dLog("connection error event received." + JSON.stringify(error)); });

redis-server脱机崩溃节点

我在这里有一段时间。 我已经阅读了大量的文档和其他民族关于同一主题的问题,无法find如何阻止这种情况发生的答案。 我有意closuresredis服务器,以确保应用程序在生产中不会完全走向核心,但是我所做的任何事似乎都阻止了这种情况的发生。 这里是我的代码现在是一个非常简单的例子… var cluster = require('cluster'); var express = require('express'); var http = require('http'); var redis = require('redis'); var redisAdapter = require('socket.io-redis'); var sticky = require('sticky-session'); var port = process.env.PORT || 3333; var workers = 3; var app = express(); var server = http.createServer(app); var io = require('socket.io')(server); if(!sticky.listen(server, 3333, {workers: workers})) { […]

使用Socket IO在Node JS进程完成时发出消息

如何使用Socket IO和Express + Nodejs,以便在用户login时,我在MEAN栈应用程序的后台运行MongoDb更新查询。 我必须通知用户MongoDb进程已经以非阻塞的方式完成。 我不想使用callback,因为我必须将用户redirect到login页面,而无需等待此查询完成。 所以,如果这个MongoDb进程在用户login后的30秒之后完成,我想要刷新一条消息,说明已经完成了查询更新。 我已经设置套接字IO,但我不知道如何使用它,我的特殊情况。 Express +节点代码 io.on('connection', function(client) { console.log('Client connected…'); client.on('complete', function(data) { client.emit('messages', 'Hello from server'); }); }); 以下是我的AngularJs代码。 var socket = io.connect('/socketTest'); socket.on('connect', function(data) { socket.emit('complete', 'Mongo Process Done'); }); 这些是我从网站上复制的例子,我真的不明白需要做什么才能在客户端捕获这个事件。

使用nodejs / socket.io和wscat获取“套接字挂起”

我有以下nodejsnetworking套接字服务器 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(8000); app.get('/', function (req, res) { res.sendFile(__dirname + '/index.html'); }); io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); console.log("Listening on 8000"); 当试图连接使用wscat wscat -c ws://localhost:8000/ 我得到以下错误 error: Error: socket hang up 它使用以下JavaScript在浏览器中工作得很好 […]

NodeJS函数被socketio事件中断

我在看似并发的nodejs游戏服务器中看到了一些奇怪的行为。 这很奇怪,因为Nodejs应该在一个线程中运行,因为它不使用任何并发。 问题是我有一个使用setImmediate()重复调用的更新函数。 在这个函数中,我在两个地方使用了一个数组。 但是,当“disconnect”事件触发时(也就是客户端与服务器断开连接时),同样的数组也会被修改。 所以恰巧在时序alignment的情况下,断开事件在更新函数中访问数组的第一个位置触发,但在第二个位置之前触发,数组被修改,所以服务器在尝试数组时尝试被访问在第二位。 下面是一些可能使这张图片清晰的代码: function update(){ for(var i = 0; i < gameWorlds.length; i++){ gameWorlds[i].update(); console.log("GAMEWORLDS LENGTH BEFORE: " + gameWorlds.length); NetworkManager.sendToClient(gameWorlds[i].id, "gameupdate", gameWorlds[i].getState()); console.log("GAMEWORLDS LENGTH AFTER: " + gameWorlds.length); gameWorlds[i].clearGameState(); } } setImmediate(update); //in the NetworkManager module, the disconnect event handler: socket.on("disconnect", function(){ for(var a = 0; a < sockets.length; a++){ […]

如何查看由Socket IO发送的数据?

我正在开发一个使用SocketIO和NodeJS的游戏。 然而,游戏目前发送的数据太多,我想通过检查每帧发送的数据来找出原因。 我怎样才能做到这一点?

Socket.io简单节点应用程序不工作

我有这个小sockets房间的应用程序,但有一个原因是行不通的。 我试图让用户join房间点击并显示警报,无法找出问题,我有点新的套接字,甚至不能得到这个简单的应用程序工作..这是我的代码 ////app.js var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket) { socket.on('room', function(room) { socket.join(room); }); }); room = "abc123"; io.sockets.in(room).emit('message', 'what is going on, party people?'); http.listen(3000, function(){ console.log('listening on localhost:3000'); }); ////index.html <!DOCTYPE html> <html> <head> <title>flip</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> […]

Socket.io – 监听器必须是socket.io事件的一个函数

我试图重写我的socket.io服务器,以躲闪“回拨地狱”的事情。 现在我试图听一个事件,而不是传递一个匿名函数作为callback,我想传递一个模块导出的函数。 基本上我想这样做 socket.on('joinChat', myFuncExportedByModule(/* stuff */)); 而不是这个 socket.on('joinChat', function() { /* stuff */ }); 只要我试图调用myFuncExportedByModule,节点发回给我一个“TypeError:监听器必须是一个函数”。 有任何想法吗?

我如何从快递服务器传递数据来反应意见?

我有一个简单的快速服务器连接到一个orientdb数据库。 我需要从快递中传递信息来反应意见。 例如,在expression我有: router.get('/', function(req, res, next) { Vertex.getFromClass('Post').then( function (posts) { res.render('index', { title: 'express' }); } ); }); 所以,在这个例子中,我需要在我的反应索引组件中, postsvariables设置组件的状态。 (我只在前端使用反应,而不是在服务器端) class IndexPage extends React.Component { constructor(props) { super(props); this.state = { posts: [] }; } render() { return ( <div> <Posts posts={posts} /> </div> ); } } 我如何从快递中得到回复? 我发现也许我可以从反应做一个Ajax请求,但我认为这不是最好的方法。 如果我需要以实时的方式获取post,例如使用socket.io,有什么区别? PD:在expression我有可能使用一些模板引擎像把手或霍根。 这个模板引擎可以帮助这个主题吗? […]

从内部callback中断父代函数的执行

我为Unity3D创build了一个nodejs服务器,使用socketio进行networking连接。 我有一个作为比赛室的function,当玩家离开游戏时,我想离开这个function。 玩家每创build一个新房间,都应该进入该function并重新开始。 是否有可能从一个子callback中断父执行的function? exports.initGame = function (userdata) { //do prematch stuff with userdata and execute game logic on the callbaks socket.on("something", function (someNetdata)({ // how do i stop parent function from here? }); // more socket.on callbacks } 编辑:忘了提及该function正在出口。 不知道这是否改变了一切。 编辑2:鉴于jfriend00答案中讨论的build议,我会给出一个更广泛的解释这个问题。 目前的stream量如下: 用户连接,我定义了一些“连接”callback函数。 相关的一个是startMatchMaker(Io, socket, data) 。 matchMaker为玩家创build一个空间(或者如果有空间的话join),然后继续执行前面提到的gameInit(io, socket, room, data) 。 gameInit(…)函数以空间为关键字将相关数据存储在全局数组中,例如Players[room] = […]