Articles of 套接字

Socket.io – 如何获得服务器端的客户端URL请求?

在我的app.js(服务器)我需要知道从哪里(URL)请求来了。 目前,我从客户端传递URL作为参数: socket.emit('request', window.location.href); 并处理它的服务器端 socket.on('request', function(url){ console.log(url); … }); 但这显然是有风险和不安全的(客户端可以向服务器发送任何东西)。 所以我猜测..是否有可能获得URL参数只在服务器端? 也许从套接字对象?

Nodejs错误:getaddrinfo ENOTFOUND&EADDRINFO

我正在使用Request模块来获取HTML页面,它工作的很好,但一段时间后,我得到错误ENOTFOUND和EADDRINFO的一些请求。 在网上看了一下之后,我发现了一些类似的问题( #699 , #5488 , #697 ),而我的理解是,我可能不会消费一些(或全部)响应,套接字池的最大大小。 我不确定所有这些,但我正在考虑增加globalAgent.maxSockets (100?),并始终在请求callback开始时调用response.resume()来消费响应。 这有什么意义吗? 还是我的方式脱轨? 我查看了Node的代码,试图了解resume()是什么,但我不确定是否find了正确的函数( #L698 )。 谢谢你的帮助。

Express / torrent-stream:从stream中写入文件,使用url将套接字发送给客户端,但客户端无法find文件

我正在开发一个个人项目,基本上需要一个磁铁链接,开始下载文件,然后在浏览器中呈现video的洪stream。 我使用一个名为torrent-stream的npm模块来完成大部分的工作。 一旦我创build了可读stream并开始写文件,我想用videoURL向客户端发送套接字消息,以便客户端可以呈现html5video元素并开始stream式传输video。 我遇到的问题是,一旦客户端呈现video元素,并试图find源mp4我得到一个404video文件中找不到错误。 任何意见,这将是高度赞赏队友。 🙂 控制器function: uploadVideo: function (req, res) { var torrentStream = require('torrent-stream'); var mkdirp = require('mkdirp'); var rootPath = process.cwd(); var magnetLink = req.param('magnet_link'); var fs = require('fs'); var engine = torrentStream(magnetLink); engine.on('ready', function() { engine.files.forEach(function(file) { var fileName = file.name; var filePath = file.path; console.log(fileName + ' – ' + […]

在node.js中pipe道stream的性能如何?

我有一个用Node.js写的TCP服务器。 当在其服务器套接字上收到一个套接字时,该进程将套接字传递给进程池。 它要么分叉,要么重用先前分叉的过程。 然后使用ChildProcess.send()将接收到的套接字传递给其他进程。 这完全控制了对subprocess的套接字。 我正在考虑采取不同的方法,但我担心潜在的性能权衡。 我想反而通过标准input或者unix域套接字或者pipe道将套接字传递给subprocess。 为什么这种方法在我的特定领域更可取,有很多原因,但我不会用这些细节来解决这个问题。 所以我只想知道Node.jsstream上pipe()方法的性能特点。 是否在系统级别处理stream的pipe道,或者Node.js是否必须从一个stream中读取每个字节并将其发送到目标? 有几个系统调用(即splice())提供一些文件描述符的零拷贝stream。 Node.js是否使用某种类似的机制,或者是手动的?

apr_socket_recv:通过对端重置的连接(104)nodejs Ubuntu 14.10 x64 8GB RAM 4核心(VPS)

我正在研究node.js中的一个项目。 该项目是关于位置(GPS)跟踪。 我的项目的最终目标是服务器1M的并发请求。 我所做的是, 在端口8000上的node.js列表中创build一个服务器 谷歌地图的HTML文件,以查找用户位置/ GPS位置 服务器和html文档之间的单个套接字连接传递位置信息 从客户端设备获取用户位置的API(可以是移动应用程序) 一旦服务器通过提到的API接收用户位置,它将通过套接字将该信息发送到客户端(HTML文档)。 它的工作很好,很好。 问题 我正在使用apachebench负载testing我的服务器。 当我增加并发性基准经常与错误中断 apr_socket_recv: Connection reset by peer (104) 我怎么解决这个问题,这个问题的真正原因是什么。 注意:如果我在本地Windows机器上运行相同的服务器,它成功地提供20K请求。 我改变了 ulimit -n 9999999 软硬文件开口限制为100万 既不能解决我的问题。 请帮助我清楚地了解问题。 我如何增加到1M的并发。 是否有可能与一些更多的硬件/networking调谐? 编辑: 我在服务器上使用socketCluster与no的工人相当于核心/ CPU(即)4我的工作人员 服务器端htop命令的CPU使用率为45% 内存使用量约为4GB / 8GB ,交换空间未使用 我用来加载服务器的ab命令是 ab -n 20000 -c 20000 "http://IP_ADDRESS:8000/API_INFO"

Angular.JS中的Resource + Socket.io工厂

我正在使用Angular.JS编写一个Web应用程序,它使用Express和Socket.IO(一个Node模块)编写的后端系统。 我已经在Angular.JS中编写了一个列出元素的工厂: angular.module('myApp.api', ['ngResource']) .factory('Element', function($resource, Socket) { return $resource( 'http://localhost:4000/elements/:id', { id : '@id' }, { update: { method: 'PATCH' } } ); }); 这个工厂在ElementCtrl中使用,并相应地显示了这些元素,这是完美的: angular.module('myApp.element', []) .controller('ElementCtrl', ['$scope', 'Element', function($scope, Element) { var elements = Element.query(); }]); 不过,我也在后端实现了Socket.io,如果一个元素被添加到元素列表中,它将发送消息。 我想改变元素工厂或find一些其他的方式来处理这个透明的控制器。 我的客户端Socket.io代码如下: angular.module('myApp.socket', []) .factory('ElementRealtime', function($resource, Socket) { var socket = io.connect('http://localhost:4000'); return { on: […]

Heroku Websocket(socket.io)'空闲连接'H15 – Node.JS

我不知道如何摆脱“空闲连接”错误。 它曾经更糟糕,但它仍然发生在我们每个左右。 这是我用Papertrail得到的日志: Aug 09 23:07:25 heroku/router: at=info method=GET path="/a/login/" host=… request_id=f99431f8-9ce9-4e1e-b16f-0ae2b50870ab fwd="74.210.150.28" dyno=web.1 connect=1ms service=258ms status=304 bytes=305 Aug 09 23:07:26 heroku/router: at=info method=GET path="/js/auth.js" host=app.sofiatutors.com request_id=12896c98-9803-4161-bf5b-06028123ff86 fwd="74.210.150.28" dyno=web.1 connect=2ms service=3ms status=304 bytes=240 Aug 09 23:07:56 heroku/router: at=info method=POST path="/api/email/reset/qEUsZwkRvp750OBgCFuXImiCWPhQbTD0vFVaGEyCZJJXEJGpm6Gi7cgKWsLqHOTusRHieWyVgEbqe6T5qH7wCJT9ROToeHnINhTDvq5unWT6r7fwh4ha59PlQVwB6TmS" host=app.sofiatutors.com request_id=ae44cd3d-cb06-42bd-8948-9e8ca8273ebe fwd="74.210.150.28" dyno=web.1 connect=1ms service=395ms status=200 bytes=426 Aug 09 23:08:11 heroku/router: at=info method=POST path="/api/email/reset/qEUsZwkRvp750OBgCFuXImiCWPhQbTD0vFVaGEyCZJJXEJGpm6Gi7cgKWsLqHOTusRHieWyVgEbqe6T5qH7wCJT9ROToeHnINhTDvq5unWT6r7fwh4ha59PlQVwB6TmS" […]

如何将videoblob发送到node.js服务器通过将其转换为二进制数据包?

我正在使用html5 getUserMedia来获取用户的摄像头stream,并存储到一个对象,即stream现在我想发送到服务器使用socket.io。 当我使用follwing代码时,我得到一个数组 navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; var video=document.querySelector("#outputview"); if( navigator.getUserMedia ) { navigator.getUserMedia( {video: true, audio: true},successcallback,errorcallback); function successcallback( stream ) { video.src = window.URL.createObjectURL(stream); var socket = io('http://192.168.1.102:8000'); socket.emit('data',stream);` 如何将其转换为数据stream,以便我可以发送此stream在另一个页面中查看?

AngularJS:socket.io破坏套接字

我正在使用一个节点的socket.io服务器和一个基于angular度的socket.io客户端(使用angular-socket.io ),除了在一个特定的条件下,它运作良好:我不知道如何彻底销毁sockets当套接字无法连接时,用它完成。 工作stream程是这样的:在一个给定的页面上有一个button来打开一个模式,模式的打开将sockets工厂注入到模块控制器中,并且连接到socket.io服务器。 这一切都很好,当套接字可以连接。 当模式closures时,调用$ scope.destroy并且模态控制器中的处理程序试图清理套接字。 这种模式可以closures和重新打开多次,或只有一次。 我多次创build/销毁套接字的过程可能是我的问题的一部分,这可能不是正确的范例,但是当模式被closures时,将无法与其交互,并且在页面离开之后套接字当然不会不需要存在或保持连接。 套接字创build: angular.module('app.common.newSocketFactory', ['btford.socket-io']) .factory('newSocketFactory', ['socketFactory', function(socketFactory){ return function(){ return socketFactory({ioSocket:io.connect('http://localhost:3000', {forceNew: true})}); }; }]); 注射: angular.module('…', [ 'app.common.newSocketFactory', …. ]) .controller('Controller', ['$scope', '$modalInstance', 'newSocketFactory', … function ($scope, $modalInstance, newSocketFactory, …){ … $scope.socket = newSocketFactory(); 这是我的销毁处理程序: $scope.$on('$destroy', function(){ $scope.socket.emit('unlisten'); $scope.socket.disconnect(); //have tried passing true too. }); 这可以正确地工作,当套接字能够连接在模式closures之前,服务器中的断开的事件观察到客户端断开连接。 另外,我可以closures模​​式,然后closures服务器,不会尝试重新连接。 […]

socket.io错误 – 在build立连接之前closuresweb套接字连接

我从这个页面学到了一点 – > https://github.com/Automattic/socket.io/issues/1846 我需要SSL套接字吗? 我一直在努力解决这个错误很长一段时间没有解决scheme,任何天才都可以解决这个难题? 我的应用程序代码 var express = require("express"); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); app.use(express.static(__dirname + '/html')); http.listen(process.env.PORT || 3000, function(){ console.log('listening on *:', process.env.PORT || 3000); new shell.Shell(app, io); }); app.use(function(request, response, next){ response.header("Access-Control-Allow-Origin", "*"); response.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"); response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token"); request.id = […]