Tag: 套接字

从Node.js中的https.Server#clientError获取remoteAddress

在Node.js中, http.Server和https.Server发出clientError事件,但具有不同的参数: http.Server#clientError(exception, socket) https.Server#clientError(exception, securePair) 随着securePair是securePair的一个实例, securePair.cleartext一个tls.CleartextStream和securePair.encrypted一个tls.CryptoStream 。 问题是:如何获得导致clientError的客户端的地址和端口? 理论上,这应该起作用: socket = securePair.cleartext.socket; console.log(socket.remoteAddress + ':' + socket.remotePort); 实际上,当我尝试使用HTTP(假装它是一个HTTP服务器)连接到HTTPS服务器并在几秒钟后取消时,我得到一个typesECONNRESET ,但是socket.remoteAddress和socket.remotePort都是undefined (even虽然securePair.cleartext.socket确实是一个net.Socket而不是undefined )。

在负载平衡的Amazon EC2上节点socket.io

我有一个标准的LAMP EC2实例设置在Amazon的AWS上运行。 在安装Node.js,socket.io和Express以满足实时更新的需求的同时,我正处于应用程序负载平衡的阶段。 这一切都工作,但我的套接字不是。 这是我的设置看起来如何: — EC2 >> Node.js + socket.io / Client >> ELB — \ — EC2 >> Node.js + socket.io [RDS MySQL – EC2 instances communicate to this] 正如你所看到的,每个实例都有一个Node和socket.io的安装。 然而,偶尔Chromedebugging将会返回原因{"code":1,"message":"Session ID unknown"}的套接字请求,我猜这是因为它正在与其他实例进行通信。 另外,假设我在页面A上,并且套接字需要发送到页面B–由于负载均衡器,这两个页面可能在不同的实例上(它们都将同时打开)。 据我所知,使用“粘滞会话”这样的东西在这种情况下是行不通的,因为这两个页面将被限制在它们各自的实例中。 我怎样才能解决这个问题? 我需要一个专门用于Node的专用实例吗? 这似乎有点矫枉过正…

socket.io而不使用默认名称空间/房间function

我发现为这样的多个terminal设置自己的自定义path更简单 服务器端: io.on('connection', function(client) { var username = client.handshake.headers.users[0].username; client.on(username+'_con1', function(data) { io.emit(username+'_con1',data); }); client.on(username+'_con2', function(data) { io.emit(username+'_con2',data); }); } 以上方法是否正确? 至less我能够使它工作。

客户端无法findsocket.io.js

我已经阅读了关于这个主题的所有其他post,但我找不到我的问题的答案。 我有Express服务器运行在默认端口或5000 (process.env.PORT || 5000) 。 然后我添加了socket.io但客户端无法findsocket.io.js文件。 经过一些testing后,我认为有一些端口冲突问题。 这是我的服务器端代码: var express = require('express'), app = express(), bodyParser = require('body-parser'), server = require('http').createServer(app), io = require('socket.io').listen(server); app.set('port', (process.env.PORT || 5000)); 编辑:客户端的东西: 编辑2:另外,我不认为这是重要的,但我在Heroku本地进行testing。 编辑3:目录结构: –api –images –node_modules –scripts –pages main_page.ejs –styles composer index.js npm-debug package 编辑4:凹凸

定期检查和清理服务器中的文件

我有以下与socket.io后端。 每当我们在新的浏览器选项卡中通过localhost:3000打开一个连接时,将在服务器的文件夹tmp/中创build一个以套接字标识命名的文件。 var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); server.listen(3000); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); io.sockets.on('connection', function(socket) { var fs = require('fs'); fs.writeFile("tmp/" + socket.id, "hello", function (err) { if (err) { return console.log(err) }; console.log('a file is saved!'); }); }); 因为套接字可能会断开连接,以后不活动或闲置。 […]

Microsoft SQL数据库的WebSocket侦听器

我目前正在使用WebSocket作为向客户传输数据的一个项目。 基础设施看起来像这样。 客户端 – > Web服务器 – > Microsoft SQL数据库 我认为最理想的情况是这样的:客户端打开服务器的套接字。 服务器打开一个套接字到Microsoft SQL数据库。 无论何时更新数据库(某些数据已被插入),数据库将数据写入套接字。 服务器将数据写回客户端。 这可能有点乏味,也许我可以以某种方式直接从客户端打开一个套接字到数据库? 我想知道是否有办法自动通知套接字的Web服务器,如果MSSQL数据库更新,以便它可以处理该信息。 主要的问题是, 我将如何做这项工作? 我已经看过一些使用WebSockets的项目,比如Node.JS和Socket.IO,也是Tornado。 虽然我还没有find任何线索,在哪里寻找这个特定的function。 我发现一些相当不稳定的用于NodeJS的MSSQL数据库的驱动程序,但是不明白是否有任何方法可以将数据库创build到数据库,并在数据库被泵入数据库时​​立即通过套接字发送数据。 我也意识到,在客户端和数据库之间build立一个套接字是不明智的,因为现在这不是一个问题,SQL不是实时应用程序的方式,但我必须目前 :) 编辑1: 感谢@tomfanning我现在知道这个问题的解决scheme,但严重怀疑性能的改善。 让我为你描绘一下情况。 在我使用MSSQL数据库上的触发器的情况下,我想象会发生这种情况。 情况1 数据库被更新 触发器被拉 CLR脚本连接到Web服务器。 无论是通过一个套接字,它必须打开和closures每个触发器或通过HTTP(S)请求,涉及打开和closures标题(这是无用的开销) Web服务器接收触发器并将数据发送到客户端。 客户端更新。 现在想象一下相同的场景,但是随后使用AJAX 情况2: 客户端为AJAX请求设置1000ms超时 客户端超时并发出AJAX请求 数据库执行一些查询并回传结果 客户端更新。 在情况1中,你需要一个请求和一个套接字发送/接收,情况2你只需要一个请求。 如果我将AJAX请求的超时设置为10MS,那么对用户来说就好像它是一个像websocket一样的实时应用程序? 还是情况1仍然更有效率,我只是夸大? 提前致谢!

NodeJS套接字有时工作

所以,我有一个节点服务器,运行expressjs io(使用socket.io),我正在build立一个网格地图来跟踪数据库中的坐标。 只是,我遇到了一个奇怪的问题,就是我的sockets有时只听。 起初没有错误信息,只有偶然的机会让页面运行,我得到了这个错误。 Uncaught TypeError: Cannot call method '0' of undefined UkPS99A_w96Ae0K570Nt?t=1395276358213&i=0:1 当我点击文件UkPS99A_w96Ae0K570Nt?t=1395276358213&i=0:1我得到这个代码: io.j[0]("8::"); 如果我刷新页面,每隔几次,它会突然find大约10个瓦片点击,然后停止工作。 我的数据库正在更新,直到套接字基本消失。 这是我在地图上发送坐标的位置: io.emit("move", {x:this.x,y:this.y}); 服务器监听: app.io.route('move', function(req) { con.getConnection(function(err){ if (err) console.log("Get Connection Error.. "+err); //removed query because redundant req.io.emit("talk", {x:req.data.x,y:req.data.y}); }); }); 和我的套接字脚本: io.on("talk",function(data) { console.log(data.x,data.y); }); 我的脚本包含在这个页面的底部: <script src="socket.io/socket.io.js"></script> <script>io = io.connect();</script> <!– open the socket so […]

获取PIL图像的二进制表示而不保存

我正在编写一个集中使用图像的应用程序。 它由两部分组成。 客户端部分是用Python编写的。 它对图像进行一些预处理,并通过TCP将其发送到Node.js服务器。 预处理后,Image对象如下所示: window = img.crop((x,y,width+x,height+y)) window = window.resize((48,48),Image.ANTIALIAS) 要发送套接字,我必须以二进制格式。 我现在正在做的是: window.save("window.jpg") infile = open("window.jpg","rb") encodedWindow = base64.b64encode(infile.read()) #Then send encodedWindow 但是,这是一个巨大的开销,因为我将图像保存到硬盘上,然后再次加载以获取二进制格式。 这导致我的申请速度非常慢。 我读了PIL Image的文档,但没有发现任何有用的东西。

Mongodb服务器套接字closuresreplSet

当我们进行大量的并行连接时,我们遇到了closuresmongodb套接字的问题。 这是一个testing脚本: var mongodb = require("mongodb"); var async = require("async"); mongodb.MongoClient.connect("mongodb://mongo-dev1:27017/test", function(err, db) { if (err) { throw err; } var calls = []; var col = db.collection("test"); var count = 10000; for(var i = 0; i < count; i++) { (function(i) { calls.push(function(cb) { console.time("update_" + i); col.update({ i : i }, { i […]

socket.io不存储会话

我有使用node.js和socket.io的应用程序。 我想在会话中存储一些信息。 我做了一个例子。 但是我的代码不起作用。 当我运行脚本和刷新页面时,我看到: NaN 2 接下来,当我刷新页面时,我可以看到 NaN 2 NaN 2 所以会话不存储。 我如何修复我的代码? var Session = require('express-session'), SessionStore = require('session-file-store')(Session); var session = Session({ secret: 'pass', resave: true, saveUninitialized: true }); var config = require("./config.json"); var express = require('express'); var app = express(); var socketio = require('socket.io'); var server = app.listen(3000, function(){ console.log('Start') }); […]