Tag: socket.io

Node.js + Socket.IO websockets负载很重

几年来,使用Node.js + Socket.IO开发了一个实时应用程序,并且有相当多的实时消息(每天发送〜200K信息)。 看起来我们已经达到了一个新的负载阈值,由于某些原因,某些用户在Chrome浏览器中的websockets连接正在回退到间隔轮询(jsonp,xhr),即使浏览器支持websocket。 接下来需要在节点事件循环中分析延迟,但目前正在使用netstat cmds大约有2600个并发socket.io连接。 任何想法为什么websockets连接回落到间隔轮询? 我们也看到一些socket.io超时,连接被拒绝,在高峰负载时间。 但服务器上的CPU是合理的(节点进程峰值为25%,总体为45%,并且服务器上有足够的内存空间)。 我目前的理论是在节点事件循环中有一些延迟,即备份套接字连接。 为了减less负载,我正在考虑增加更多的广播发射间,以进一步减less发送/接收的消息总数。 任何其他的想法,赞赏!

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 […]

如何从Android应用程序与服务器同步倒数计时器

一个倒数计时器是从Node.js服务器启动的,当启动一个倒数计时器时,一个套接字事件(倒计时~20 秒 )被广播到所有使用Socket.IO连接的客户端(Android App)。 有时由于互联网连接速度慢或者由于其他原因,一些客户端收到广播的消息延迟,倒计时器在这些设备中延迟启动。 服务器和android应用程序中的倒数计时器未同步。 我应该怎么做才能将倒数计时器与Android应用程序中的服务器同步?

如何将一个简单的聊天整合到laravel 5中

我将为我的laravel 5应用程序集成一个聊天服务,但是我坚持以“laravel方式”来完成这个任务,因为为了连接到聊天,需要端口号,我不能通过以laravel路由器的端口号作为参数。 我根据这个http://code.tutsplus.com/tutorials/real-time-chat-with-nodejs-socketio-and-expressjs–net-31708文章做了一个简单的,但function齐全的networking聊天,但现在我不知道如何以及在哪里(哪些目录)放置文件,以便我在laravel中正常工作。 注意:这个聊天服务应该是网站的一个页面,而不是一个单独的服务。 任何帮助如何构build服务将不胜感激! 谢谢!

在Android应用和Chrome客户端之间build立DataChannel

所以我在创buildandroid应用程序客户端和在Chrome上运行的Web应用程序客户端之间创build一个数据通道时,陷入了datachannel困境。 以下是我完整的audio和videostream正确的代码。 但是当我尝试使用DataChannel发送消息时,它将返回False和State作为CONNECTING。 我试图从1周后解决,但无法运行。 编辑:问题已解决。 这是最后的工作代码。 Android不再支持RTPDataChannel Home.java public class Home extends Activity { public List<PeerConnection.IceServer> iceServers; private GLSurfaceView videoView; public static SocketIO socket; ArrayList<String> userIDs = new ArrayList<>(); private static final String FIELD_TRIAL_VP9 = "WebRTC-SupportVP9/Enabled/"; String RoomId = ""; String sreverURL = "http://xx.xx.xx.xx:xxxx/"; private EditText roomid; private VideoRenderer.Callbacks remote_view; private VideoRenderer.Callbacks local_view; protected PeerConnectionFactory […]

阅读长时间运行的PHP进程客户端

我想读一个长期运行的PHP过程,当满足条件时将返回数据。 从我的研究中,我遇到了: 长期投票 套接字(socket.io&node.js) 棘轮 我正在努力理解和实施我的问题。 我在PHP中有以下循环: public function store(ClientImpl $a) { $request = \Illuminate\Support\Facades\Request::all(); $originateMsg = new OriginateAction('Local/' . $request['agent'] . '@auto-answer'); $originateMsg->setContext('G-Outgoing'); $originateMsg->setPriority('1'); $originateMsg->setExtension($request['dial']); $a->send($originateMsg); while(true) { if( $a->process() ) break; usleep(1000); } $a->close(); echo 'OK'; ob_end_flush(); flush(); } $a->process()调用以下方法: /** * Main processing loop. Also called from send(), you should call this […]

如何编写安全套接字IO客户端

是否有任何文档或例如如何编写一个socket.io客户端连接到一个socket.io服务器安全(encryption连接,不只是纯文本令牌authentication )? 下面的代码显示了如何创build服务器,我可以使用“ curl –cacert ssl_cert.pem https:// localhost ”来testing服务器是否启动: // declarations var fs = require('fs'); var io; var app; var httpsServ = require('https'); var host = "localhost"; var port = 443; var processRequest = function (req, res) { // empty method } // create httpsServ app = httpsServ.createServer({ // server SSL key/cert files key: fs.readFileSync("ssl_key.pem"), […]

如何使用Socket.io发送通知到特定的用户组/angular色?

我正在开发一个项目,我想实现一个function,在一个行动发生后,我想通知所有在线pipe理员在Web应用程序,并向他们显示一个消息,说明一个行动发生。 我有几个问题: 我如何识别哪个用户在线并具有pipe理angular色? 我正在寻找一些围绕“显示所有在线用户”列表的想法 我应该把这些pipe理员放到一个房间里,只通知那个房间吗? 我如何获得所有在线用户,并将其套接字ID与数据库中的ID /用户名相关联? 我还需要将在线状态显示在表格中,以便我知道UserOne和John目前是否在线。 我怎样才能保持在线/离线状态? 我必须保持数据库外的某个地方的状态吗? 我正在使用Laravel v5.1,NodeJS v5.0,Socket.io v1.3和Redis来玩弄通知。 有没有人有任何想法如何处理这个问题? 我并不是在寻找任何特定于代码的东西,我只是对这个想法背后的理论以及它的工作原理感到好奇。 谢谢!

使用socketio的audio聊天

我在nodejs中是新的。 我正在开发语音聊天应用程序,在应用程序客户端可以说话,他的声音将广播(使用nodejs服务器)到其他客户端,我用socketio从麦克风发送声音到服务器,但我不知道如何接收器声音在客户端,谁能帮我? 用于发送语音的客户端代码(我不知道这是从麦克风发送语音的真实方式): navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; navigator.getUserMedia( {audio:true}, gotStream , onError ); function gotStream(stream) { var context; if (window.AudioContext) { context = new AudioContext(); } else { context = new webkitAudioContext(); } var mediastream = context.createMediaStreamSource(stream); var bufferSize = 2048; var myscriptnode = context.createScriptProcessor(bufferSize, 1, 1); myscriptnode.onaudioprocess = function […]

什么时候应该在node-postgres中调用done()?

第4.4.3节 我正在使用socket.io连接客户端到服务器。 我猜想,我想在服务器启动时将服务器连接到数据库,但在“docs”中有很多警告:“使用done()或者坏事情会发生”。 我应该什么时候使用它? 如果我打开数据库的连接,然后在其中创buildsocket.io服务器,然后在每个查询后使用done() ,然后我30秒后收到错误空闲: Error: This socket has been ended by the other party 可能是我应该创buildsocket.io,然后在每个用户会话中打开连接到数据库? 或打开连接到每个查询数据库,如果它当前不打开? 诚实,我不明白,为什么我应该这样做,为什么我不能创build单一的连接到服务器启动数据库,并通过它发送所有的查询,而不是这个开闭式重复。