Tag: socket.io

在使用nodejs DNS负载平衡+ socket.io + socket.io-redis时出现EAGAIN错误。 我该如何解决?

服务器定期打开一个文本文件来添加或更改内容。 一台服务器没有问题,但在负载平衡和使用redis连接服务器和两台服务器共享文件夹之后,会发生EAGAIN错误。 从服务器1连接多个客户端并引用相同的文本文件并更改内容没有任何问题。 服务器1的客户端和服务器2的客户端引用相同的文本文件时,这是一个不规则的错误。 我该如何解决? ++我们发现了这个问题。 与nfs共享文件夹时,如果共享文件夹的根目录是服务器1,则服务器1上的EAGAIN错误相反,如果共享文件夹的根目录是服务器2,则会在服务器2上发生错误EAGAIN。如果设置了另一台服务器上的共享文件夹进行testing,并将服务器1和服务器2连接到另一台服务器上的共享文件夹,则不会出现错误。 为什么? 服务器configuration DNS load balancing nodejs(socket.io,socket.io-redis) SERVER 1, 2 redis npm模块版本: express@4.13.4 socket.io@1.5.0 socket.io-redis@1.1.1 socket.io-adapter@0.5.0 fs@0.0.1 multer@0.1.8 js文件: var express = require('express'); var multer = require('multer'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var mysql = require('mysql'); var fs = require('fs'); var request […]

net :: ERR_INSECURE_RESPONSE Angular 2 + Node.js + Socket.io

我正在开发一个与Angular 2,Node.js和socket.io的Web应用程序。 它与http完美地工作,但是我想实现https协议,我打了墙。 我得到NET :: ERR_INSECURE_RESPONSE从angular度到我的网页api的任何http调用,也试图build立一个套接字连接。 这是我做的: 1)生成我的私钥和csr。 2)使用该csr从Comodo申请SSL证书。 3)从Comodo收到2个文件: – domain.ca-bundle – domain.crt 4)我将这两个文件和我的私钥复制到一个文件夹:/ etc / apache2 / ssl / 5)我修改了etc / apache2 / sites-default中的default-ssl.conf来指向这些文件: SSLCertificateFile /etc/apache2/ssl/domain.crt SSLCertificateKeyFile /etc/apache2/ssl/mypriv.key SSLCertificateChainFile /etc/apache2/ssl/domain.ca-bundle 再加上: ServerName domain.io ServerAlias www.domain.io 6)启用https并重新启动apache。 如果我的证书设置正确, 请使用SSL分析器( https://sslanalyzer.comodoca.com/ )进行validation。 它确认现在连接到我的网站是安全的,所以我认为这部分是正确的,现在我需要修复应用程序和服务器来处理https。 7)这是如何创buildangular度的套接字连接: this.socket = io.connect('https://server_ip' + ':3000', { rejectUnauthorized:false}); 这个会在晚些时候给我net :: ERR_INSECURE_RESPONSE 8)Angular应用程序也在向服务器发送http请求,如下所示: […]

向NodeJS + SocketIO添加HTTPS

我正在使用NodeJS和SocketIO创build应用程序,并希望添加HTTPS支持。 目前,我的应用程序按照预期与http。 var http = require('http'); var socketIO = require('socket.io'); var fileServer = new(nodeStatic.Server)(); var server = http.createServer(function(req, res) { fileServer.serve(req, res); }).listen(8080); var io = socketIO.listen(server); io.sockets.on('connection', function(socket) { … 这对我来说是完美的。 我尝试添加以下HTTPS支持: var https = require('https'); var fs = require('fs'); var socketIO = require('socket.io'); var options = { key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }; var […]

socket.io – polling-xhr.js:264 GET错误

我一直在我的本地主机上的聊天应用程序(这工作正常),但是当我试图承载它在Github或000webhost上 ,我得到这个错误polling-xhr.js:264在两个主机(两个主机有一个https连接)。 我正在使用cfenv来parsingCloud Foundry提供的环境variables。 以下是有关错误的图片: 它会继续这样下去… 这是看我的代码: server.js var cfenv = require('cfenv'); var appEnv = cfenv.getAppEnv(); var express = require('express'); var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(appEnv.port, appEnv.bind, function(){ console.log("Server starting on " + appEnv.url); }) app.use(express.static(__dirname + '/')); … // rest of socket.io code 的index.html … <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> […]

从UWP发送消息到socket.io

我有一个简单的节点socket.io服务器和一个C#UWP应用程序。 我想从应用程序发送简单的消息到服务器,但似乎消息不是在正确的格式/协议/东西。 我试图让格式正确,但我不知道该怎么做。 app.js io.on('connection', function(socket){ console.log('CLIENT CONNECTED') socket.on('message', function (msg) { console.log('socket msg') console.log(msg) } 当我从socket.iotesting者发出消息时,控制台显示 socket msg dwadwadwada (就像它应该) debugging输出: engine:socket packet +1ms socket.io-parser decoded 2["message","dwadwadwada"] as {"type":2,"nsp":"/","data":["message","dwadwadwada"]} +0ms socket.io:socket got packet {"type":2,"nsp":"/","data":["message","dwadwadwada"]} +0ms socket.io:socket emitting event ["message","dwadwadwada"] +0ms socket.io:socket dispatching an event ["message","dwadwadwada"] +0ms 现在,如果我从我的UWP应用程序发送一个string(为简洁起见删除了尝试/捕获和exception处理) string msg = "test"; await sendMessage(msg); private […]

socket.io客户端在刷新后多次听相同的事件

我有一个包含项目表的母版页,并且在与服务器成功的socket.io连接之后,表数据将不断刷新。 当单击表中的项目(项目的id将被传递给服务器)时,子视图将使用ajax加载,并且将通过监听来自服务器的事件而不断刷新。 现在的问题是,通过select表中的另一个项目,子视图正在多次监听(即使在成功执行ajax操作后清除了子视图(HTML))。 例如,如果select10个项目,则会侦听10次,并且无法查看子视图中发生的情况(所有内容都非常快速地闪烁)。 app.js(nodejs) io.on('connection', function (socket) { console.log('Client Connected…' + clients[socket.id]); // updates master page table. socket.emit('data', self.StatusObject(self.allModules)); socket.on('close', function (err, res) { console.log('Client disconnected…' + err + ' ' + res); }); //updates child view. socket.on('childData', function (id) { var data = self.FindModule(id); statusPacketTimer = setInterval(function () { socket.emit('publishChildData', self.StatusPacket(id)); }, 1000); […]

使用集群将Socket.IO缩放到多个Node.js进程

把这个头发拉出来…有人设法将Socket.IO扩展到由Node.js的集群模块产生的多个“工作者”进程? 比方说,我有以下四个工作进程(伪): // on the server var express = require('express'); var server = express(); var socket = require('socket.io'); var io = socket.listen(server); // socket.io io.set('store', new socket.RedisStore); // set-up connections… io.sockets.on('connection', function(socket) { socket.on('join', function(rooms) { rooms.forEach(function(room) { socket.join(room); }); }); socket.on('leave', function(rooms) { rooms.forEach(function(room) { socket.leave(room); }); }); }); // Emit a message every […]

在socket.io中检索获取请求参数

想象一下,我有服务器上的socket.io ,我正在监听连接: io.on('connection', function (socket) { //…..How do I get the www.myserver.com:3000/address=123&name=John string here? … } 现在,想象一下浏览器中的客户端types如URL: www.myserver.com:3000/address=123&name=John 现在, 从上面的connection事件处理程序中,我如何获得URL客户端types? 我想在socket.handshake使用“referer”属性。 这是正确的方法吗?

两个用户在socket.io中获得控制权限 – 竞争条件

两个或两个以上的用户被通知一个可用的房间。 我如何试图阻止它,并且使得一次只有一个用户可以得到通知。 socket.on('Check', function (room) { io.in(room).clients((error, clients) => { var hasPush = false; clients.forEach(function (clientId) { var client = io.sockets.connected[clientId]; if (client.hasPush) { hasPush = true; socket.emit('busy', room); return; } }, this); if (!hasPush) { socket.hasPush = true; socket.emit('available', room); } }); }); 我试图阻止使用共享variables,但没有奏效。 rooms = {}; socket.on('check', function (room) { if (!rooms[room]) { […]

无法使socket.io在HTTPS上工作

我正在使用简单的socket.io 2.0.3服务器没有快递或任何类似的在我的Laravel应用程序中运行简单的聊天function。 一切都很好,直到我决定将网站切换到HTTPS。 现在socket.io拒绝连接(ERR_CONNECTION_CLOSED)。 这是我最简单的设置: server.js: var io = require('socket.io')(8080, { origins : //some stuff }); HTML文件 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> var socket = io(':8080'); //more stuff 我在服务器文件夹,intermediate.crt,domain.com.crt和domain.com.key都需要证书文件 有人可以帮助最简单的例子如何使这项工作在https上? 提前致谢! 编辑:需要可能的解决scheme,不使用Express。