Articles of 套接字

socket.io不能在Chrome移动设备上工作,但它在隐身模式下工作

我正在使用AngularJS下的nodeJs和socket.io。 套接字在桌面(所有浏览器)上工作得非常好。 但不是在移动。 那么… Socket d'ont在Chrome移动工作,期待在隐身模式。 这是一些代码: 服务器端: io.on('connection', function(socket){ user = { id: socket.id, socket: socket }; console.log('connection received'); console.log(user.id); socket.emit('files', lib.all()); 客户端 socket.on('files', function(data){ var streams = data; if(streams){ $scope.streams = streams; } }); lib.all()函数正常工作。 而且我有一个angular度工厂来处理socket.io(这也工作正常)。 在铬手机套接字不接收或发射任何东西。 但他们在隐身模式下按预期工作。 以及他们在Android的Firefox工作。 我不是Chrome的专家, 但我怀疑有什么特别/奇怪的事情发生。 防火墙? 代理? 有人知道这个解决方法吗? 谢谢,祝你有美好的一天! PS:在启用了仿真的Chrome桌面上工作正常。 编辑:我创立了什么是这样的: Chrome移动“数据保护”选项。 谁使用谷歌服务器减less数据的人。 套接字可能在通过Google服务器时遇到麻烦..仍然是一个解决方法可能是伟大的。

Socket.io事件只能在同一个进程中工作

我正在尝试使用socket.io&sticky-session将消息传递给我的客户端。 问题是,连接到其中一个进程的客户端不会从其他进程获取消息,而只能从他所连接的进程中获取消息。 我怎样才能使networking套接字跨所有进程工作? Server.js: var cluster = require('cluster'); var app = require('./config/express')(db); // Init the server to run according to server CPU's if (cluster.isMaster) { for (var i = 0; i < 4; i++) { cluster.fork(); } } else { app.listen(config.port, function () { console.log('Process ' + process.pid + ' is listening to all incoming […]

即使销毁套接字,Node.js的内存使用率仍然很高

我创build了一个简单的nodejs服务器和客户端。 他们通过15000个tcpsockets互相交互。 客户代码: 'use strict'; const net = require('net'); for (let i = 0; i < 15000; ++i) { let socket = new net.Socket(); socket.connect(6000, '127.0.0.1', () => { console.log('Connected'); socket.write('data to server'); }); socket.on('data', data => { console.log(data); }); socket.on('close', () => { console.log('Connection closed'); }); } 服务器代码: 'use strict'; const net = require('net'); […]

使用Socket.IO进行Ajax长轮询

我们需要构build一个具有双向数据function的小型Javascript小部件。 它的主要function是发送消息/从服务器接收更新。 服务器将使用node.js / socket.io组合实现私人房间/频道function的实时响应。 开箱即用的socket.io-client.js库在我们的例子中被认为不是资源高效的。 作为一个Javascript小部件,它是理想的尺寸小,例如,在100K以下。 单是图书馆已经超过了100K。 所以,另一个select是不使用socket.io-client.js库,而是使用vanilla Aajax长轮询技术。 我们从来没有这样做过,也不知道做这件事需要多less工作。 有没有人做过这个? 如果是这样,你可以分享你的经验? 谢谢。

Node.js套接字_writableState是未定义的?

我有一些代码应该closures套接字,但是会导致一个错误:(使用NODE_DEBUG = net) NET: 5482 onread undefined 32 7 39 NET: 5482 got data NET: 5482 _read ATL 0 // these are output from the program 3 ATL net.js:425 if (this._writableState.finished) ^ TypeError: Cannot read property 'finished' of undefined at Socket.destroySoon (net.js:425:26) at Socket.<anonymous> (/home/crunch/js_relay_tools/atprox.js:45:4) at Socket.EventEmitter.emit (events.js:117:20) at Socket.<anonymous> (_stream_readable.js:746:14) at Socket.EventEmitter.emit (events.js:92:17) at […]

AngularJS&Socket.IO – 从Service(发送到此处)到Controller的返回值是undefined || 承诺,asynchronous

我没有让我的代码正常工作。 我正在开发一个AngularJS应用程序,包括通过socket.io连接到后端服务器。 我正在开发一个用于将用户数据发送到服务器的login。 如果发送的数据是正确的(电子邮件和密码),服务器将用“有效”和用户数据(名称,date,出生…)作出响应。 要素是: BackendService(执行发送到服务器的工厂) AppController(调用BackendService的loginfunction的控制器) Node.js服务器(计算发送的数据是否有效,以便用户可以login) 目的是在工厂的loginfunction返回一个“login代码”告诉控制器,如果login是正确的。 不幸的是该函数返回“未定义” 。 在我的研究中,我发现这可能是因为asynchronous性和承诺。 但是,我不能将给定的信息应用于我的问题,因为大部分是关于$ http。 另外 – 如果我的代码结构需要改进,请告诉我! 这是我的代码: Node.js服务器 socket.on('logincust', function (p1, fn) { connection.query("SELECT Salt FROM Customer WHERE Email = ?", [p1.Email], function (err, data, fields) { if (err) { throw err; } if (data.length > 0) { var hash = crypto.createHash('sha256').update(p1.Password + data[0].Salt).digest('base64'); […]

具有RESTful API的Socket.io

我在Node.js创build了一个RESTful API,并且我希望在通过POST请求在数据库中创build消息后立即更新客户端应用程序。 所以我决定使用Socket.io 。 这是我的server.js代码: import http from "http"; import https from "https"; http.globalAgent.maxSockets = 1024; https.globalAgent.maxSockets = 1024; let app = require("express")(); let server = http.Server(app); let io = require('./lib/sockets').listen(server) //setup Database let Database = require("./util/Database").init() import { version } from "../config/version.json"; app.disable("x-powered-by"); import bodyParser from "body-parser"; app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); import routes […]

socket.io-redis在redis 3.0.6中得到了尾随字节错误

我正在使用phpredis通过pubsub方法将数据发送到phpredis 将node.js升级到稳定版本4.2之后,我得到了来自socket.io-redis模块的trailing byte错误。 的node.js var pub = redis.createClient(2222, '127.0.0.1',{no_ready_check: true}) pub.auth(redisPassword); var allsub = redis.createClient(2222, '127.0.0.1',{return_buffers: true,no_ready_check: true}) allsub.auth(redisPassword); allsub.subscribe('somekey'); io.adapter(RedisStore({pubClient:pub,subClient:allsub})); 错误: Error: 256 trailing bytes at Object.decode (/usr/apps/js/node_modules/msgpack-js/msgpack.js:200:47) at Redis.onmessage (/usr/apps/js/node_modules/socket.io-redis/index.js:93:24) at emitTwo (events.js:92:20) at RedisClient.emit (events.js:172:7) at RedisClient.return_reply (/usr/apps/js/node_modules/redis/index.js:697:22) at ReplyParser.<anonymous> (/usr/apps/js/node_modules/redis/index.js:324:14) at emitOne (events.js:77:13) at ReplyParser.emit (events.js:169:7) at ReplyParser.send_reply (/usr/apps/js/node_modules/redis/lib/parser/javascript.js:302:10) at ReplyParser.execute […]

Nodejs错误:此套接字已被对方终止

我已经build立了一个简单的服务器和客户端,但是每当我closures客户端,似乎不可能重新连接。 这是我的客户: const net = require('net'); var client = net.connect({port: 8080, host: '127.0.0.1'}); var response = ''; // events client.on('data', function(chunk) { response += chunk }); client.on('end', function() { console.log(response); client.end() }); // main execution client.write('test'); 这里是我的服务器: const net = require('net'); var server = net.createServer(); server.listen(8080, '127.0.0.1'); server.on('connection', function(sock) { sock.on('data', function(chunk) { sock.write('test received'); […]

node.js自动调整/负载平衡的任何方法? 与socket.io

我正在尝试部署一个node.js项目,以便它可以使用loadbalancer进行自动缩放。 我尝试了AWS ELB弹性豆茎。 花了很多时间后,ELB不像预期的那样连接socket.io。 从这里我已经search了很多方法来解决这个问题: nginx代理 更改了loadbalancer上的监听器,以允许TCP端口3000(其他端口也取决于论坛/问题,我看着) redis服务器共享不同节点之间的套接字连接。 我无法真正把所有的网站,我试图让这个工作。 但它一直没有奏效。 唯一我可能还没有尝试使用route53 … 所以问题是: 如果有人有一个适当的node.js应用程序与socket.io使用弹性beanstalk(或EC2实例与负载平衡器和自动缩放)工作,有没有办法做到这一点,该方法是什么? 如果有一些链接有一些一步一步的方法,将是可怕的。 提前致谢!