Tag: websocket

WebRTC信令服务器使用Express&'websocket'包

我正在使用Rob Manson的“ WebRTC入门”中的以下代码。 它使用Node.js实现 该代码启动了一个实时video通话,我已经得到它在网页浏览器中的2个标签之间运行。 我只是试图修改这个,所以它使用Express而不是'http'包。 我遇到的问题是没有video显示在我的版本中。 “呼叫者”按预期工作,但是“被叫者”在“请稍等…请连接您的呼叫…”消息时停顿。 在浏览器控制台或我的terminal中没有检测到错误,并花了一天的时间试图解决这个问题,我仍然不知道我哪里出了问题。 这里是原始的信令服务器文件: // useful libs var http = require("http"); var fs = require("fs"); var websocket = require("websocket").server; // general variables var port = 8000; var webrtc_clients = []; var webrtc_discussions = {}; // web server functions var http_server = http.createServer(function(request, response) { var matches = undefined; if […]

高速公路(节点)不检测掉连接,无限等待,我可以设置超时?

我在节点中使用AutobahnJS代码来接收来自服务的数据。 它工作得很好,每秒获得多个事件。 当我的networking暂时断开连接时,Autobahn没有检测到丢失的连接,也没有写入“Websocket connection dropped”到控制台,它只是挂起。 下去。 是否有可以设置的超时,如果1分钟后没有数据到达,重新连接? 或者我可以使用setTimeout函数来ping服务器,如果没有pong返回closures连接,并尝试重新打开它? 我search了一下,直到我的手指stream血,但是我没有find这个问题的直接答案。 非常感谢你! connection.onopen = function(session) { session.subscribe(arg, someEvent); } connection.onclose = function() { console.log("Websocket connection dropped"); } connection.open();

节点服务器随机尖峰到100%,然后崩溃。 如何诊断?

我正在做一个带有websockets和一个节点服务器的在线浏览器游戏,如果我有大约20-30个玩家,CPU通常在2%左右,内存在10-15%。 我只是使用一个便宜的数字海洋液滴托pipe它。 但是,似乎每20-30分钟,服务器CPU使用率将在10秒内达到100%,然后最终崩溃。 直到那一刻,CPU通常徘徊在2%左右,游戏运行非常顺利。 我不能告诉我的生活是什么触发这个,因为没有在日志中的错误,在游戏中我没有看到任何东西导致它。 只是似乎是一个随机事件,导致服务器失效。 也有一些较小的尖峰,不要把服务器closures,但很快就会解决自己。 这是一个图像: 我不认为我在任何地方阻止事件循环,而且我也没有任何似乎长时间运行的执行path。 往返于服务器的数据包通常每个用户每秒两个,所以根本没有太多的带宽。 而且服务器大部分只是一个中继,除了validation以外几乎没有数据包的处理,所以我不确定代码path可能如此密集。 我能做些什么来分析这个问题,并找出从哪里开始调查引起这些峰值的原因? 我想象一下,我忘记了一些代码path,在负载下令人惊讶的缓慢,也许我错过了一个节点标志,可以解决它,但我不知道。

从Python发送数据到节点服务器与套接字(NodeJS,Socket.io)

我试图从我的树莓pi3发送传感器数据(在python中)到我的本地节点服务器。 我发现了一个叫python的模块,用于向服务器发送数据。 在这里,我试图从我的树莓派3发送值22(以后会有传感器数据)到我的本地节点服务器与socket.io requests.get()的作品,但put命令不会发送数据。 你能告诉我错误在哪里吗? #!/usr/bin/env python # import requests r = requests.get('http://XXX.XXX.XXX.XXX:8080'); print(r) r = requests.put('http://XXX.XXX.XXX.XXX:8080', data = {'rasp_param':'22'}); 在我的server.js我尝试获取数据,但不知何故收到 server.js var express = require('express') , app = express() , server = require('http').createServer(app) , io = require('socket.io').listen(server) , conf = require('./config.json'); // Webserver server.listen(conf.port); app.configure(function(){ app.use(express.static(__dirname + '/public')); }); app.get('/', function (req, res) { […]

节点服务器冻结了大量的websocket数据传输

我试图将数据从node.js服务器stream到很多客户端(> 3000)。 node.js服务器从一个客户端接收数据并将其广播到所有客户端。 数据每秒发送一次,每个数据大约2KB。 我使用ws模块通过websocket发送数据。 节点服务器位于仅运行服务器的AWS EC2 m3.medium实例上。 客户端在15个不同的EC2 t2.micro实例上模拟,每个客户端启动300个客户端。 一切都开始好,但一段时间后(约3分钟)服务器冻结。 我不能杀死进程或在服务器上做任何事情。 但是,如果我杀死了所有的客户端(通过重新启动所有的客户端实例),服务器再次响应。 在服务器上,CPU是40%到60%,内存是<1.5GB(实例有4GB),下载带宽大约是1.5Mbits / sec,上传带宽大约是75Mbits / sec。 我做了一个速度testing,下载或上传时的最大带宽约为400 Mbits / sec。 在服务器冻结之前,内存从300MB增加到1000MB。 我不知道为什么,如果是相关的。 我使用堆转储,并没有设法了解泄漏的位置。 这是服务器上的代码: var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({ port: 8080 }); var users = Array(); wss.binaryType = 'arraybuffer'; wss.on('connection', function(ws) { console.log('new user connected'); users.push(ws); console.log(users.length); ws.on('error', function(e) […]

接收WebSocket上的ArrayBuffer(ws)

我想处理使用ws从客户端收到的ArrayBuffer消息。 客户端,我直接收到一个ArrayBuffer感谢ws.binaryType ,但服务器端,我没有收到一个ArrayBuffer,但像这样(string?):'<缓冲00 00 2a 00 00 00 00 00 00 00 00 00 00 00 00 00>'。 服务器如何接收ArrayBuffer? 客户端 : var ws = new WebSocket("ws://localhost:3000/"); ws.binaryType = 'arraybuffer'; ws.onopen = function() { var buffer = new ArrayBuffer(15); var dv = new DataView(buffer); dv.setInt16(1, 42); ws.send(buffer); }; 服务器端 : var express = require('express'), app = […]

如何在Node.js WebSocket服务器和C#客户端之间交换二进制数据?

我有最好的HTTP资源 Node.js WebSocket服务器和Unity客户端。 我用来传输JSON数据,但parsing成本太多的CPU资源。 现在,我尝试从C#发送byte []消息,如下所示: //sending sample array – new float[] { 1.32, 3.12 } //convert an object to a byte array private byte[] ObjectToByteArray(Object obj) { if(obj == null) return null; BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, obj); return ms.ToArray(); } 但服务器收到Uint8Array [1,3],小数部分丢失。 var wss = new WebSocket.Server({ […]

如何掩盖websockets?

我正在尝试在JavaScript中编写一个客户端,它将websockets发送到node.js / ws服务器。 经过大量的阅读,我明白,它有用,甚至RFC要求掩盖从客户端发送到服务器的所有数据,但我不明白该怎么做。 我发现了这样一些文章: http://www.htmlgoodies.com/html5/tutorials/making-html5-websockets-work.html 但我找不到任何起点甚至是掩盖数据的function。 我真的不明白遮掩的概念。 图书馆/function将是有益的。 我正在努力解决这个问题一段时间没有…如果我掩盖它发送的数据,我需要在服务器端“揭露”? 你有什么想法?

与socket.io Cloudflare SSL握手失败

这是我正在使用的代码: "use strict" var express = require('express'); var https = require('https'); var app = express(); var bodyParser = require('body-parser'); app.enable('trust proxy'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); var fs = require('fs'); var options = { cert: fs.readFileSync('ssl_certs/cert.pem'), key: fs.readFileSync('ssl_certs/privkey.pem'), requestCert: true, }; var server = https.createServer(options, app); var io = require('socket.io')(server); var port = 2083 server.listen(port, […]

HTTP2 – 如何具有类似WebSocket的function(Keep-Alive,EventSource等)

想知道如何在Node.js中设置客户端和服务器之间的持久连接。 持久连接应该能够从双方来回发送请求。 似乎需要有一个机制来描述每个请求,比如\r\n如果请求是JSON,但是不知道如果之前已经完成了什么最佳实践, 想知道如何networking套接字处理这一点。 Mozilla说Keep-Alive不应该用在生产中,所以想知道HTTP2是否仍然适用。 使用EventSource可以接收服务器事件,但是想知道是否有办法添加客户端事件发送到服务器。 最后,我希望有一个像WebSockets一样的双向通信的简单设置,但是我不确定HTTP2的最佳实践,以及是否应该使用WebSockets完成。 我宁愿尝试没有websockets这样做。 https://daniel.haxx.se/blog/2016/06/15/no-websockets-over-http2/