Tag: socket.io

如何将事件发送到在socket.io中的不同选项卡或浏览器中打开的同一用户?

我通过创造房间发现它可以被执行..但一些地方出了问题。 服务器端:- var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var users = {}; var rooms = []; http.listen(3000, function(){ console.log('listening on *:3000'); }); io.on('connection', function(socket){ socket.on('Init', function(data){ if(data in users){ var roomName = 'room'+ data; var index = rooms.indexof(roomName); if(rooms.notContain(roomName)){ rooms.push(roomName); var index = rooms.indexof(roomName); users[data].join(rooms[index]); socket.join(rooms[index]); }else{ socket.join(rooms[index]); } […]

这是一个Node.js和Socket.io的声音authenticationscheme吗?

我正在尝试使用Node.js(Express),Socket.io和Redux / ReactJS来设置用户login系统。 这是我正在采取的方法: 用户一进入Web应用程序,用户就通过Socket.io连接。 通过socketio-auth用户需要进行身份validation并将其用户名和密码传递给服务器。 然后,使用socket.io-express-session ,就像本例中一样 ,我使用用户名和密码设置了一个cookie,这样每次他们回到网站,都可以通过socketio-auth进行重新authentication。 (我意识到我可以保存cookie中的唯一标记,而这会更好吗?) 在服务器上,在进行身份validation时,我只是将他们的详细信息与他们的socketId一起保存到Redux存储中,以便在会话持续的每个Socket.io请求中使用。 假设这是通过SSL完成的,这是安全的吗? 你会build议什么改变? 我试图尽可能简单但仍然非常安全。

使用Socket.io,Angular,JWTvalidation数据直到用户validation刷新后才可用

我正在使用Angular和Socket.io,socket-jwt用于身份validation套接字,以及angular-socket-io在前端。 当页面加载时,客户端尝试连接到socket.io服务器。 它被拒绝是因为它们没有为客户build立令牌。 当套接字连接build立时,我正在解码服务器上的令牌,然后我想向客户端发送数据,包括socket.id,我将更新模型和视图。 用户进行身份validation之后,直到页面刷新为止,socket.io数据才可用,然后发送到客户端。 如何在用户login并使数据可用后build立socket.io连接? 我曾尝试调用我的套接字工厂,用户login后使用login控制器内的socket.connect()和io.connect()。 sockets工厂 app.factory('socket', function ($window, socketFactory) { var token = $window.localStorage.yourTokenKey; var myIoSocket = 'http://localhost:8080'; var socket = io.connect(myIoSocket, {'query' : 'token=' + token}); return socket; }); login控制器loginfunction $scope.login = function() { AuthService.login($scope.user) .then(function(msg) { socket.connect(); $state.go('home'); }, function() { console.log('Login Failed'); }); }; 服务器代码 var socketIo = require('socket.io'); […]

Socketio:错误:单独的代理U + D83D不是一个标量值

最近我的node.js服务器已经崩溃了很多,由于这个socket.io错误。 我怀疑是客户端发送无效的utfstring,这将在utf8.js文件中引发错误。 有没有办法避免服务器崩溃? 这是非常令人沮丧的。 如果需要的话,我要猴子修补这个文件。 Error: Lone surrogate U+D83D is not a scalar value at Error (native) at checkScalarValue (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:69:10) at encodeCodePoint (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:90:4) at Object.utf8encode [as encode] (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:111:18) at Object.exports.encodePacket (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:74:34) at encodeOne (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:387:13) at eachWithIndex (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:256:5) at map (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:263:5) at Object.exports.encodePayloadAsBinary (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:411:3) at Object.exports.encodePayload (/root/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js:225:20) at XHR.Polling.send (/root/node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js:238:10) at Socket.flush (/root/node_modules/socket.io/node_modules/engine.io/lib/socket.js:341:20) at Socket.sendPacket (/root/node_modules/socket.io/node_modules/engine.io/lib/socket.js:317:10) […]

socket.io发射给特定的用户,并给他们x的时间来回应?

我有一个在线聊天。 它使用房间。 如果用户发送消息而另一个用户不在线,则应增加“错过的消息”计数器。 我试图用setTimeout创build一个超时,如果它们发出一个事件清除超时。 然而chatOnline不会像我预期的那样触发,这会导致它总是报告用户处于脱机状态,并且将missed_texts列的计数器递增,因为它不相关。 我如何检索,如果用户从socket.io在线。 我的目标是避免在数据库中存储存在信息,这可能会很快失去控制。 我试过的代码: socket.on('chatSend',function(data){ if(socket.client.user.room_id !== null){ //were storing some crap in the socket object for easy retrieval. data.user_id = socket.client.user.id; data.room_id = socket.client.user.room_id; data.timestamp = ~~(new Date() / 1000); //insert message into chat table r.table('chat').insert(data).run().then(function(res){ //retrive generated record from table r.table('chat').get(res.generated_keys[0]).run().then(function(data2){ io.sockets.in(data2.room_id).emit('chatNew',data);//emit to all users in room log('chatSend'); //attempt […]

如何在Python中使用socket.io客户端?

我用我的html文件中的socket.io(JavaScript库)发送和获取套接字数据,通过此代码: var socket = io(); $('form').submit(function () { socket.emit('msgSend', $('#m').val()); $('#m').val(''); return false; }) socket.on('msgReceive', function (msg) { $('#messages').append($('<li>').text(msg)); }) 我在后端使用node.js服务器和socket.io 。 但是现在我想用python作为客户端。 我怎样才能使用Python而不是客户端JavaScript?

devise一个Nodejs WebApp

我目前正在构build一个web应用程序来显示远程机械的实时仪表板。 我正在尝试使用Nodejs来实现这个系统,我希望能够对如何实现它的想法进行批评。 该应用程序将有两个主要目标: 1.)实时显示机器状态,每分钟左右更新一次 2.)每15分钟将机器的状态保存到数据库。 为了访问数据,我需要向第三方供应商提出API请求,以便从他们的数据库中提取数据。 每台机器需要大约6个请求,到今年年底,我一次只能支持大约20台机器。 综合考虑,我需要每分钟提出约120个请求,以获得有关机器的最新信息。 正在使用webapp的用户只能在login时看到机器的一个子集。 但是,有些机器将在不同的用户之间共享,所以我不想同时在同一台机器上复制API调用,而宁愿build立一个每分钟刷新一次的所有机器数据的caching,然后只向每个用户发送与他们相关的部分数据。 而且,这对于数据logging的目的是很方便的,因为当我想保存数据时,我只需要保存整个caching。 我所关心的一个问题就是能够及时完成数据获取API请求,以便重新显示数据。 我知道我可以使用asynchronous库在并行调用中收集数据,但是我担心这些请求不会及时完成,然后再生成第二个更新,从而导致请求build立。 一种select是我可以让每个API请求独立于其他请求发送其数据到前端,但我希望能够批量更新所有内容。 我在构build系统时遇到的另一个问题是socket.io是否会成为我需要的有用资源。 我知道该库可以帮助您生成实时应用程序,这正是我所需要做的,但是从我读到的内容来看,socket.io似乎是为所有用户共享所有更新而devise的,而不是仅仅向每个用户发送部分更新。 而不是使用socket.io来发送服务器驱动的更新,我可以在我的应用程序的前端添加一些代码来定期请求更新。 使用这个解决scheme意味着我可以让每个客户简单地请求他们需要的数据。 不过,我仍然对图书馆能否提供任何可能有助于开发这个项目的事情感到好奇。 我最后的担心与扩大应用程序有关。 在今年年底之后,我将需要监视越来越多的机器,每增加一台机器,我需要抓取和存储的数据量也会增加。 如果任何人有什么build议,如何尽早开始devise系统的规模好,我想听到它。 我很欣赏任何反馈。 谢谢。

如何使用NodeJS的集群模块在多个核心上正确运行socketio服务器?

套接字IO服务器在单个NodeJs实例上运行良好。 但是,当我使用NodeJS的集群模块运行多核心服务器时,我收到错误,“连接closures之前收到一个握手响应”。 我find了原因,发现, 问题的实质是,当您在服务器或多个服务器上运行多个节点应用程序线程(worker)时,socket.io客户端连接将按照随机循环方式由群集路由,握手/授权的客户端请求将被移交到那些他们没有握手/授权的工人那里乱七八糟的地方开始。 来源链接 我已经尝试了一些东西,使其工作,但迄今没有成功。 这是代码 'use strict'; process.env.NODE_ENV = process.env.NODE_ENV || 'development'; var express = require('express'); var config = require('./config/environment'); var session = require('express-session'); var redisStore = require('connect-redis')(session); var cluster = require('cluster'); var domain = require('domain'); var socketIo = require('./config/socketio'); var REDIS = require('redis') var store = REDIS.createClient(); var pub = REDIS.createClient(); var […]

Socket.io Android HTTPS – 连接错误xhr轮询错误

我正在开发一个聊天应用程序与HTTPS。 这是我用过的Socket.IO 服务器 首先我用node.js和节点模块"socket.io": "^1.4.5"开发了服务器"socket.io": "^1.4.5" 在服务器上我有这个: var secure = { ca: fs.readFileSync('ca.pem'), key: fs.readFileSync('key.key'), cert: fs.readFileSync('cert.crt') }; var server = https.createServer(secure, app); var io = require('socket.io')(server); 客户端 我用https://cdn.socket.io/socket.io-1.4.5.js开发了这个网站 我使用pod 'Socket.IO-Client-Swift', '~> 5.5.0'开发了iOS应用程序, 最后我正在开发Android应用程序 编译('io.socket:socket.io-client:0.7.0'){ 排除组:'org.json',模块:'json' } 在网站和iOS应用程序我没有问题的websocket,但是当我尝试连接Android应用程序中的套接字我收到以下错误: io.socket.engineio.client.EngineIOException:xhr轮询错误 谢谢

服务器到服务器套接字IO消息

语境: 使用require("socket.io");运行服务器的Node.js require("socket.io"); 使用require("socket.io-client");运行另一台服务器的Node.js require("socket.io-client"); 在使用标准时接收确认(来自其他服务器): io.on("connection", function() { console.log("Something connected."); }); 问题: 不幸的是,我无法得到任何一台服务器上的CLIENT 都运行客户端和服务器socket.io发送消息到其他服务器。 我意识到这可能是一个代码错误,所以我会包括正确的缘故,但对于logging,我想知道是否有什么我做错了语义上,而不是代码明智的。 代码:(LoginServer.js) var app = require('http').createServer(); var io = require('socket.io')(app); var ioc = require("socket.io-client"); var LoginServer = (function() { function LoginServer() { this.gameServerSocket = ioc.connect("http://localhost:3031", {reconnect: true}); } LoginServer.prototype.initialize = function() { var self = this; io.listen(3032); io.on("connection", function(socket) { […]