Tag: websocket

sockets.io发射有时会失败吗?

我有一个基于Web的多人游戏。 时不时发生某人被踢出,因为服务器没有得到客户的预期消息。 从我的日志,似乎客户端没有断开连接,只是没有发送消息或服务器没有收到它。 这里我的问题是“这个事情是否经常发生?” 我是否应该使用某种callback机制来确保消息已传递,如果不是再次发送或者是否存在某些我不知道的问题?

node.js上的websocket握手

我正在尝试构build一个代码来pipe理与node.js的websocket连接 我没有find一个方法让握手在铬中被接受 Chrome返回“WebSocket连接到'ws://127.0.0.1:8888 /'失败:在WebSocket握手期间出现错误:Sec-WebSocket-Accept不匹配” 有了这个 << >>> var http=require("http"); var crypto=require("crypto"); var server=http.createServer(function(req,res){ res.writeHeads("200","content-type:text/plain"); res.end(); }); server.on("upgrade",function(req,socket,head){ for(var item in req.headers){ console.log(item); console.log(req.headers[item]); } var GUID="258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; var secKey=req.headers["sec-websocket-key"]; var sha=crypto.createHash("sha1"); secKey+=GUID; secKey=sha.update(secKey).digest("base64"); var key64=new Buffer(secKey); key64=key64.toString("base64"); console.log(key64); var headersReturn='HTTP/1.1 101 Switching Protocols\r\n'; headersReturn+='Upgrade: websocket\r\n'; headersReturn+='Connection: Upgrade\r\n'; headersReturn+='Sec-WebSocket-Accept:'+key64+"\r\n\r\n"; var boo=socket.write(headersReturn); console.log(headersReturn); socket.on("connect",function(){console.log("success");}); socket.on("data",function(data){ console.log(data); }); }); […]

Websocket间隔:移动设备上的性能问题?

在我目前的项目中,我发现在移动设备上使用带有socket.io和node.js的websockets是个问题。 似乎在一个时间间隔内移动设备处理套接字消息存在问题。 我将其减less到最小的情况: 服务器(最小的express.js服务器)以特定的时间间隔向客户端发送消息: setInterval(function(){ socket.emit('interval'); }, 500); 客户端只是在收到的消息之间的时间消息并显示它们: socket.on('interval', function (data) { timeElement.html(new Date() – startTime); startTime = new Date(); }); 在desktop (使用Chrome),消息之间的结果时间在515 ms相当稳定。 所以它像一个15毫秒的延迟,但消息间隔是一致的。 在mobile device (我正在使用Galaxy Nexus和Chrome)时间between 400 and 600 ms变化,无论哪种方式都会出现更多的极端峰值。 我想用这样的间隔作为游戏转向指示器,这个问题导致移动设备上很多滞后和不均匀的玩家移动。

有些用户无法连接到websocket

我正在使用socket.io.Some用户发送消息给我'我无法发送消息为什么'我研究了这个问题,猜测防火墙或防病毒阻塞websocket.If浏览器不支持websocket,socket.io自动切换到xhr轮询,这是没有问题的。但是,如果浏览器支持websocket和防病毒或防火墙阻止websocket,socket.io不切换到xhr,并且用户不能发送消息。如何解决这个问题? 这里是一个websockettesting报告的用户 http://websocketstest.com/result/244711 Websocket的支持是好的,数据接收是否定的。

如何使用WebaudioAPI在浏览器上播放ArrayBufferstream?

我有一个独立的设备,使用ffmpeg和streamaudio到我的节点服务器。 我使用ffmpeg命令对stream进行编码 ffmpeg -f alsa -i hw:0 -acodec mp2 -f mp3 -r 30 http://localhost:8086/abc 输出: ffmpeg version 0.8.8-4:0.8.8-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Oct 22 2013 12:31:55 with gcc 4.6.3 [alsa @ 0x20ef9c0] Estimating duration from bitrate, this may be inaccurate Input #0, alsa, from 'hw:0': Duration: N/A, start: 10088.609013, bitrate: N/A […]

适用于使用代理的客户端的socket.io flash(和其他)回退的正确设置

萨拉姆(手段你好):) 我在我的node.js应用程序中有以下基本设置。 但对于使用代理连接的客户端或防火墙后面的客户端不起作用。 我想知道我应该添加什么来使socket.io回退按预期工作: 服务器端: var io = require('socket.io').listen(3000, { log: 3, flashPolicyServer: true, transports: ['htmlfile', 'xhr-polling', 'jsonp-polling', 'flashsocket'] }); io.sockets.on('connection', function(){ // my event handlers }); 客户端: WEB_SOCKET_SWF_LOCATION = "oath/to/my/copy/of/WebSocketMain.swf"; var socket = io.connect('http://localhost:3000'); // my event handlers

binary.js和文件广播到连接的客户端

我在这里要做的是通过使用binaryjs客户端/服务器系统通过websocket / binaryjs广播一个文件到连接到服务器的其他客户端。 这个问题伴随着大文件(或者完全是随机的?!?!)。 客户端停止向服务器发送数据给出错误。 这是我第一次尝试类似这样的东西,而且我对套接字编程还很陌生,所以我可能会错过一些东西……或者所有东西。 这是客户 <html> <head> <script src="http://cdn.binaryjs.com/0/binary.js" type="text/javascript" language="javascript"></script> <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript" language="javascript"></script> <script> $(document).ready(start); function upload(e){ var file = e.target.files[0]; var chunkSize = 1024 * 1024; //1mb in this case but the problem seems to be uneffected by the chunk size var fileSize = file.size; var start = 0; var […]

缩放websocket节点服务器

我知道这个问题已经部分地问过( 如何扩展Node.js WebSocket Redis服务器? ),但我想知道是否有任何替代Redis快速共享节点实例之间的WebSocket对象,特别是types套接字( https:// github.com/einaros/ws )。 我已经尝试了redis,并遇到了一个事实,即networking套接字对象是循环的,很难连续。 然后,我使用Crockford的cycle.js( https://github.com/douglascrockford/JSON-js/blob/master/cycle.js ),但它似乎去掉websocket对象的方法,因为我得到一个节点说错误我已经从redis中读回套接字并重新循环后,“Object object has no method send”。 任何帮助将非常感激。 在此先感谢詹姆斯。

socket.io在500个并发连接后停止工作

我有一个JavaScript浏览器的socket.io客户端模拟器创build并发连接( io.connect(host, {'force new connection': true}); )到我的socket.io node.js服务器,但是当websocket连接的数量在545左右,它突然停止工作,客户端尝试通过xhr-polling或任何其他后备协议(当然没有任何成功)连接。 我试图调整我的服务器,即使我现在还没遇到任何硬件问题。 我的ulimit -n设置为40960, ulimit -s是8192. sysctl -a | grep文件输出: fs.file-max = 800000 fs.file-nr = 7520 0 800000 我试图设置http.globalAgent.maxSockets为40000,但没有任何影响。 即使我试图从不同的机器(位于不同域之间,没有代理服务器)之间连接,只有100个并发连接,socket.io服务器将在达到545个客户端时停止服务。 我阅读了很多博客和类似的东西: Realtime Nodejs Stresstest Story Caustiks Blog with 250k + connections 有没有人有另一个想法,我可以错过看? 我正在使用我能得到的最新的socket.io和node.js。 我的服务器在Ubuntu上运行。

客户端将所有图像永久存储在数据stream中

我正在实现一个节点服务器,它周期性地从networking摄像头抓取图像,并通过节点模块Delivery.js将它们发送到客户端。 但是,看看我的浏览器使用的资源(在Chrome开发工具中),似乎发送的每个映像都是由客户端(或可能由服务器?)无限期地存储的。 我使用的代码类似于Delivery.js自述文件中的“将文件推送到客户端”示例: 服务器代码 //set the camera to take a snapshot and send it for the required framerate setInterval(function(){ //take a snapshot of the current view cam.snapshot('./current_view.jpg' ,function( jpeg ) { //send this snapshot to client delivery.send({ name: 'current_view.jpg', path : './current_view.jpg' }); }) delivery.on('send.success',function(file){ //console.log('File successfully sent to client'); }); }, cameraUpdateDelay); 客户端代码 var […]