Tag: websocket

websockets / ws TypeError

我收到来自websockets / ws的错误: /root/diag/node_modules/ws/lib/WebSocket.js:422 event.target = target; ^ TypeError: Cannot assign to read only property 'target' of reserved fields (2, 3) must be empty at WebSocket.onError (/root/diag/node_modules/ws/lib/WebSocket.js:422:18) at WebSocket.emit (events.js:110:17) at Receiver.onerror (/root/diag/node_modules/ws/lib/WebSocket.js:832:10) at Receiver.error (/root/diag/node_modules/ws/lib/Receiver.js:317:8) at Receiver.processPacket (/root/diag/node_modules/ws/lib/Receiver.js:186:12) at Receiver.add (/root/diag/node_modules/ws/lib/Receiver.js:91:24) at firstHandler (/root/diag/node_modules/ws/lib/WebSocket.js:767:22) at process._tickCallback (node.js:355:11) 这不是指在我的代码中的任何特定的行,所以我甚至不知道在我的代码中造成这一点。 这是模块的新的更新错误还是我做错了什么? 我有一段时间没有更新websocket客户端(这是错误的来源)。 编辑 websocket在两个不同的位置使用: // main […]

Nodejs是否可以validationPHP用户的会话?

请随身携带,因为这是一个很长的问题,但有很多细节来解释我的问题。 我在做什么? 我正在尝试在PHP应用程序和电话系统的REST API之间build立通信。 由于我的网站都是用PHP编写的,所以我决定用cURL调用API来构build使用PHP的通信。 为了让你加快速度,用户和API之间有两种types的通信,我喜欢把它们分成两个不同的类别 发送一次/接收一次这将是一个例子,用户尝试拨打一个新的电话号码“拨打800-123-4567”。 API接收请求并返回一个交互ID,以允许用户控制呼叫(即,断开,静音,搁置….) 每秒发送一次/接收在此通信中,我将在用户会话和API之间创build“持续”连接。 然后,每隔一秒,我会检查API的新消息。 在接收到来自API的消息之后,我必须更新用户的caching,读取最新用户的caching,并最终向浏览器发送caching数据。 问题? HTTP是无状态的。 用户发送给Web服务器的每个请求都会生成一个新的TCP连接。 这个问题是,我每秒查询API的新消息,我将有一个新的TCP连接。 在每个用户的任何给定时间平均需要约200个TCP连接。 所以,如果我有300个用户使用应用程序/服务器,那么大约有60,000个TCP连接为Web服务器打开。 正如你可以清楚地看到解决scheme在这里不能很好地扩展,服务器在我面前爆炸是一个时间问题… 🙁 另一个问题是PHP不是asynchronous的,如果与API的通信花费更长时间或返回错误,则会导致问题。 FWIW,我试图用JavaScript的SharedWorker来消除一些开销。 我每一个尝试服务器发送事件,但用户仍然产生了太多的TCP连接到服务器。 没有什么第一个问题,我只能够减less一点连接。 Nodejs可以帮忙吗? 几个人build议我使用Nodejs而不是PHP来完成这个任务。 当然,我不打算把我的PHP应用程序改成Nodejs,因为这是疯狂的,因为我的应用程序是巨大的。 我想考虑运行一个nodejs服务器作为PHP服务器和API服务之间的中间人。 这个想法是在节点服务器上运行一个WebSocket。 然后,客户端将任何通信传递给WebSocket,然后WebSocket将通信发送到服务器。 这听起来不错,但是一旦深入挖掘,似乎越来越棘手。 Nodejs的挑战 当用户login到我的PHP应用程序,我validation他们的凭据,一旦他们在那我创build一个存储到MySQL数据库的会话。 一个会话是有效的以下必须是正确的 IP地址必须与创build会话的IP相匹配 代理数据也必须匹配(我可以没有它的nodejs) 会话的空闲时间必须less于900秒。 为了Nodejs开始通信,它必须首先创build一个新的连接到API。 连接被接受后,nodejs必须跟踪“接收到的API”的下列数据 CSFR令牌 会话ID Http Cookie 为了Nodejs连接到API,它必须通过用户名,密码,服务器名称,端口和站名。 我有所有需要的信息存储到MySQL数据库,我可以很容易地得到使用PHP。 面临的挑战是NodeJS必须采取PHP会话,validation它,从数据库中提取API所需的信息,然后build立与API的连接。 问题 nodejs可以使用PHP会话来validation用户吗? 如果这样怎么样? nodejs如何使用TCP连接来防止我重载服务器?

为什么我的WebSockets握手失败与ERR_CONNECTION_RESET?

我刚刚创build了一个新的sails.js应用程序 sails new testProject 然后我做了 sails lift 现在我浏览我的地址( http://153.92.xx.xxx:1337 ),一切正常。 不过,我知道sails默认使用XHR,但如果可以的话,会尝试升级到WebSockets。 无论我尝试什么,我都无法使WebSocket工作。 我可以看到,该应用程序试图连接,但只是(待定)约18秒,才放弃。 然后回到XHR。 错误如下: WebSocket connection to 'ws://153.92.xx.xxx:1337/socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_sdk_platform=browser&__sails_io_sdk_language=javascript&EIO=3&transport=websocket&sid=8qjNepcGV5Rh3VvzAAAA' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET 我可能做错了什么? Sailsjs v0.11.2 Nodejs v0.12.7 Debian 8 x64 iptables的一切都完全接受

注销并获取新/ csrfToken后,SailsJS CSRF不匹配

我正在创build单页面应用程序。 我创build了login注销操作,他们工作正常。 但是,如果用户注销并且不会刷新浏览器中的页面,则由于“CSRF不匹配”错误而无法再次login。 脚步: 1.在第一次加载页面时,csrf是view local: <div class="app" id="app" data-csrf="<%= _csrf %>"></div> 2.用户使用此令牌成功login: 420["post",{"method":"post","headers":{},"data":{"_csrf":"VHcT2F44-KhZMJmhcAVB1H69BgTMWMZji9_8","login":"alex","password":"123"},"url":"http://127.0.0.1:1337/login"}] 430[{"body":{"id":"560e5756cd01633407eea8be"},"headers":{cut headers},"statusCode":200}] 3.然后,用户使用此令牌注销: 421["post",{"method":"post","headers":{},"data":{"_csrf":"VHcT2F44-KhZMJmhcAVB1H69BgTMWMZji9_8"},"url":"http://127.0.0.1:1337/logout"}] 431[{"body":"ok","headers":{cut headers},"statusCode":200}] 4.如果他再次尝试login,他会发现“CSRF不匹配”错误,我期望: 422["post",{"method":"post","headers":{},"data":{"_csrf":"VHcT2F44-KhZMJmhcAVB1H69BgTMWMZji9_8","login":"alex","password":"123"},"url":"http://127.0.0.1:1337/login"}] 432[{"body":"CSRF mismatch","headers":{},"statusCode":403}] 5.我正在捕获这个错误,并按照文档中的说法执行/ csrfToken请求 423["get",{"method":"get","headers":{},"data":{},"url":"/csrfToken"}] 433[{"body":{"_csrf":"49C5OVUZ-6SIL_zW3g1NGI87ux6Mlp-UJj_w"},"headers":{cut headers},"statusCode":200}] 6.尝试使用新令牌重新login: 424["post",{"method":"post","headers":{},"data":{"_csrf":"49C5OVUZ-6SIL_zW3g1NGI87ux6Mlp-UJj_w","login":"alex","password":"123"},"url":"http://127.0.0.1:1337/login"}] 434[{"body":"CSRF mismatch","headers":{},"statusCode":403}] 我可以用相同的结果重复步骤5和6。 如果我刷新页面,我可以无误地login。 问题是,发生了什么事? 为什么步骤6中的标记不匹配? 编辑:注销方法: req.session.destroy(); return res.send("ok"); 编辑2:发送请求: import socketIOClient from 'socket.io-client'; import sailsIOClient from 'sails.io.js'; var io = sailsIOClient(socketIOClient); io.socket.post(form.action, […]

Chrome浏览器无法build立websocket连接

我正在开发一个web应用程序,我包括websocket连接。 我用websocket( https://www.npmjs.com/package/websocket )安装了一个带有node.js(5.0.0)的websocket服务器。 在Chrome中,它完美的工作,但在Firefox中,这个消息出现在控制台中: Firefox no puede establecer una conexión con el servidor en wss://www.my-dev-server.com:1337/. (Firefox无法与…build立与服务器的连接) 这是服务器代码(基本上就是例子): var WebSocketServer = require('websocket').server; var https = require('https'); var fs = require('fs'); var options = { key: fs.readFileSync('/keyfile.key'), cert: fs.readFileSync('/pemfile.pem') }; var port = 1337; // Create HTTPS service. var server = https.createServer(options, function(request, response) { console.log((new […]

套接字IO使用长轮询而不是套接字

我只是重新开始使用Node和Socket IO。 我正在使用socket.io v1.3.7。 我可以加载套接字IO客户端,但它是长轮询,而不是使用套接字。 上一次我使用socketIO它工作正常。 我认为这是0.9.x的分支。 http://sockettest.dev:3000/socket.io/?EIO=3&transport=polling&t=1447350154198-2&sid=eW7B_kpSat6WfGQSAAAC 这是代码 服务器 – app.js var server = require('http').createServer(); var io = require('socket.io')(server); io.on('connection', function(socket) { socket.emit('connection', 'connected'); socket.on('disconnect', function() { socket.emit('disconnection', 'not connected'); }); }); server.listen(3000); 客户端 – index.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="//recently.dev:3000/socket.io/socket.io.js"></script> <script> var socket = io.connect('<?php echo '//' . $_SERVER['HTTP_HOST'] […]

在parsingNode.js中的JSON时遇到问题

我想parsing看起来像这样的JSON: { "values" : [{ "alpha":8 },{ "beta":4 },{ "gamma":-3 } ]} 我parsing它: console.log(msg.values.alpha) ,并得到: Missing error handler on `socket`. TypeError: Cannot read property 'alpha' of undefined 这是我在其他网站上看到的。 这样做与console.log(msg.values)返回undefined ,只是运行console.log(味精)返回正确的JSON 。 我曾经见过这个问题的其他人,但是没有人说这是做的。 谢谢!

如何创build将保持WS和WSS连接的soket.io服务器?

我有一个像这样的代码的socket.io服务器: var sticky = require('sticky-session'); sticky(function() { var app = require('http').createServer(handler); function handler (req, res) { res.writeHead(200, { "Access-Control-Allow-Origin": "*" }); return res.end('pong'); } var io = require('socket.io')(app, {'origins' : '*' + config.application.hostname + '*:*'}); const newmessagesConnections = io.of('/new-messages'); newmessagesConnections.on('connection', function (client) { ….. }); const callingsConnections = io.of('/callings') callingsConnections.on('connection', function (client) { ….. }); […]

在nodejs中使用socket.io进行pingtesting时,延迟很大

运行这个简单的pingtesting时,我经历了25秒的一致延迟。 服务器不loggingping事件,但我假设它正在接收它,因为客户端正在得到答复。 有想法该怎么解决这个吗? 客户 var io = require('socket.io-client')('http://68.12.157.176:3000') var ping_time = Date.now(); function ping(){ ping_time = Date.now(); console.log('sending ping…'); io.emit('ping'); } ping(); io.on('pong', function (data) { ping_time = Date.now() – ping_time; console.log("replied in " + ping_time + "ms"); ping(); }); 客户端日志 sending ping… replied in 25202ms sending ping… replied in 25028ms sending ping… replied in […]

测量Websocket性能的工具

使用Azure托pipe,运行node.js和socket.io的Ubuntu 12.04实例。 我可以使用哪些工具或方法来测量WebSocket的性能。 特别是,我最感兴趣的是了解我可以合理支持的最大连接数。