Articles of socket.io

在Node.JS上的Socket.io之间实现一个队列

我已经使用Node.JS和Socket.io写了一个聊天。 聊天很简单:总是有两个人的房间,一个员工和一个客户。 现在我们的容量正在成长,我们正面临一些问题,如networking问题上的消息“消失”,我们希望在我们公司和我们的客户之间实现一个排队。 就像是: 对于图片上的每个NodeJS进程,我们有6个虚拟机位于负载均衡之后。 我想知道什么是使用队列的最佳方法。 我应该在每个房间的队列中创build一个主题吗? 例如:对于用户C和D之间的交互,它将使用消息/ c:d ; 对于用户A和B之间的交互,它将使用消息/ a:b 。 或者最好使用没有任何主题的单个队列,发布/订阅消息中的所有消息并为每个订户进行广播? 如果订户有房间,他将处理该消息。 在第一种方法中,我不确定我应该如何使用MQ客户端,因为我通常初始化它们并让它运行。 当我想要创build一个caching来存储MQClient时,每个客户端将负责一个主题,在我的脑海里听起来很奇怪 – 如果我有10k个房间,我将有10k个MQclient。

在Socket IO中找不到类“CI_Controller”

如何解决这个错误? 目录-application -controller -Rest.php -app.js app.js 'use strict'; var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); var phpExpress = require('php-express')({ // assumes php is in your PATH binPath: 'php' }); var path = require('path'); app.set('port',process.env.PORT || 8000); app.set('views','application/controllers'); app.engine('php', phpExpress.engine); app.set('view engine', 'php'); app.use(require('express').static(path.join(__dirname, 'public'))); app.use(require('express').static(path.join(__dirname, 'bower_components'))); app.get('/', function(req, res) { […]

如何照顾与Socket.io通信的networking故障

我正在devise一个使用Socket.io,Nodejs,Expressjs,Redis,Angularjs的系统,在这个系统中消息传递非常重要。 用例: 我的系统需要侦听可以在多个用户之间共享的资源通知。 套接字连接到服务器与资源的信息,以便我可以维护每个资源的套接字列表。 当有资源的通知时,我会在每个套接字上为该资源发送通知。 ResourceID1 = ["scoketID1", "socketID2"] // Two sockets listening to ResourceID1 我更新套接字断开此列表还通过删除该特定的套接字ID出或资源ID列表。 通过这种方式,我确保将通知发送给共享资源的每个用户以及该用户的每个会话以及每个可以是一个会话的多个选项卡的套接字。 总之“每个sockets”。 我也维护资源通知的散列,以便每次有资源的新通知特定的资源通知散列将被更新。 ResourceID1-notificationHash : { key1:"124", key2: "abc" } 这样做的原因是,如果套接字断开像用户closures选项卡或更重要的是因为某些原因用户互联网断开连接。 并且服务器不会再次收到心跳套接字连接,并将该资源的最后一条消息发送到该套接字。 为了确保特定的套接字(客户端)总是收到消息是我的执行足够? 我知道我可以实现一个事件的callback,但是我所做的是当一个特殊的选项卡(套接字)被断开,再次连接我发送该资源的最后一条消息。 是否有其他networking故障,可能导致可靠的消息传递的问题? 我的实现是不同的,因为对于消息传递,我不考虑用户,我正在考虑sockets,可以是一个用户可以多个sockets,就像一个用户可以在同一时间有多个会话可以说在Firefox和铬,然后为每个他可以打开多个选项卡。 select套接字的原因是我的资源可以在多个用户之间共享,所以对于一个资源更新,我可能不得不将消息发送给多个用户,每个用户有多个会话,每个会话有多个套接字。

Express:从远程机器定义视图文件夹

我如何定义在另一台共享机器上显示的视图文件夹? 我可以通过\\0.0.0.0\myfolder等访问Windows资源pipe理器中的远程文件,但是我无法将视图文件夹设置为在另一个远程机器上显示的位置。 app.set('views', path.join(__dirname, '/views')); app.engine('php', phpExpress.engine); app.set('view engine', 'php'); 这定义了我的本地机器中的views文件夹。 如果我想让nodejs查看远程共享机器,我将如何设置它

如何使用socket.io和node.js将数据写入JSON文件?

我想从用户获取数据,并使用以下代码将其写入到我的json文件中: var fs = require('fs'); module.exports = function (io) { io.on('connection', function (socket) { socket.on("search list", function(search_data){ // write my object to JSON document let data = JSON.stringify(search_data); // {"name": "John", "age": "25"} fs.writeFile('./list.json', data, (err) => { if (err) throw err; console.log('Data written to file'); }); }); }); }; 我的控制台中有一条消息:“写入文件的数据”。 但是我的./list.json仍然是空的。 为什么? 我的websocket.js文件和list.json放在同一个文件夹中。

无法获取/socket.io/socket.io.js

<script src="/socket.io/socket.io.js"></script> 为什么要在客户端设置套接​​字variables之前做到这一点? 如果我有客户端脚本给定的src文件抛出“无法GET /socket.io/socket.io.js”

为什么在jquery触发器dynamic更新后socket.emit重复?

我试图更新(或更改)在客户端代码中显示的div(“显示器持有人”)的内容,这个div包含html和jQuery,它调用使用socket.emit的div之外的函数,但是一次我replace这个div的内容,函数与socket.emit多次触发,我也使用off()和unbind()函数,但他们似乎并没有工作。 有什么办法dynamic地取代div(显示器持有人)的内容,并让socket.emit只触发一次? 客户端 <!DOCTYPE html> <html> <head> <title>Help!</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> //Globals var displayCounter = 1; //Socket.io client side var socket = io('http://localhost'); socket.on('news', function (data) { console.log(data); $('#message-displayer').append("<b> Server says: </b>"+data.msg+"<br>"); }); socket.on('client-answer', function (data) { console.log(data); $('#message-displayer').append("<b> Server says: </b>"+data.msg+"<br>"); socket.emit('message', { msg: 'my data from client' }); }); //emitter function […]

观察者在angular度2中用socket.io创build多个消息

我正在使用这个代码接收味精套接字在angular2,但我已经在全球应用程序,但它创build了多个时间消息..在路由另一个页面我创build了一个聊天框组件后打开像Facebook聊天框。 `get-messages() { let observable = new Observable(observer => { this.socket = io(this.url); this.socket.on('message', (data) => { observer.next(data); }); return () => { this.socket.disconnect(); }; }) return observable; } `

如何处理nodejs中对API的并发访问

我目前正面临一个问题。 纠正我,如果我错了。 在我的项目中,我有一个NodeJS服务器有mongoDB数据库和一个android应用程序连接到它。 有4个Android设备连接到它,当服务器发布列表,它通过Socket.IO发送一个发送呼叫到所有的Android设备。 android收到发出呼叫的那一刻,它调用API来获取发布的列表。 这里请求调用(4个请求)同时到达服务器。 在这里,设备出现了意外的分配。 意外的是,有一些参数是基于哪些设备进行分配的。 当只有一个设备在线时,这个场景完美地工作,但是当并发请求从多个设备到达时,有时会出现相关的问题。 是否可以一次处理一个并发请求? 讨论/build议是受欢迎的。 执行stream程在这里 flowController.on('START', function () { // Uploading and storing the binary data as excel file }); flowController.on('1', function () { // Validation to check if file contain required sheet with name and all and convert the file into JSON format }); flowController.on('2', function () […]

在socket io客户端Android中打开握手响应是空的

我为Android实现nv-websocket-client 。 我在Log中遇到了一个错误。 如何成功连接? com.neovisionaries.ws.client.WebSocketException: The status line of the opening handshake response is empty. 09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.HandshakeReader.readStatusLine(HandshakeReader.java:99) 09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.HandshakeReader.readHandshake(HandshakeReader.java:48) 09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.WebSocket.readHandshake(WebSocket.java:3244) 09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.WebSocket.shakeHands(WebSocket.java:3123) 09-18 15:37:59.532 14225-14248/info.androidhive.firebasenotifications W/System.err: at com.neovisionaries.ws.client.WebSocket.connect(WebSocket.java:2155) 我的服务器端代码在Socket.js中。 有什么我失踪? var app = require('express')(); var http = require('http').Server(app); […]