Tag: socket.io

套接字IO房间和名单

我试图显示一个用户列表,并计算一个MEAN栈应用程序中的一个聊天室中的用户数量。 不幸的是,我遇到了一个非常严重的问题。 每当新用户进入聊天室时,用户数量都会重置。 即使新用户进入房间,我希望聊天室中的当前成员仍然坚持。 这里是服务器端代码: io.on('connection', function(socket){ var users = []; var username = ''; var room = ''; console.log('a user has connected'); socket.on('join-room', function(data){ socket.join(data.room); room = data.room; }); socket.on('request-users', function(){ socket.to(room).emit('users', {users: users}); console.log(users); }); socket.on('add-user', function(data){ io.to(room).emit('add-user', { username: data.username }); username = data.username; users.push(data.username); }); socket.on('disconnect', function(data){ console.log(username + ' has […]

ember-cli-mirageredirectsocket.io客户端,注入海市蜃楼

在这里发生的问题是,当我通过node.js连接示例socekt.io客户端与此socket.io服务器(只是运行两个terminal,并打开客户端和服务器之间的套接字连接),我没有问题。 但是,当我试图将这个socket.io-client注入到我的Ember.js应用程序中时,恰恰来自ember-cli-mirage,它将我的客户端从给定的地址redirect到: ('http:// localhost:8080') 类似的东西 http://localhost:8080/socket.io/?EIO=3&transport=polling&….. Mirage还会显示一个我无法处理的错误,即使通过设置精确的命名空间,在调用wsClient.connect()之前路由wsClient.connect()方法或调用this.passthrough() 。 我也从浏览器的控制台中粘贴错误的截图: 错误图像 你有什么想法如何解决这个问题? 提前谢谢,我也希望这个话题不要重复。 // server.js var app = require('http').createServer(handler); var io = require('socket.io')(app); app.listen(8080); function handler(req, res) { res.writeHead(200); res.end('default.index'); } var rooms = { 'room1': [ ], 'room2': [ ] }; io.on('connection', function(socket) { console.log('client connected'); socket.on('join', function(roomName) { rooms[roomName].push(socket.id); socket.join(roomName); }); socket.on('leave', function(roomName) { […]

我怎样才能通过套接字内快速路由器发出消息

我试图通过socket.io发出消息。 我想在一个快速路由器被调用的时候这样做。 var express = require("express"); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); var bodyParser = require("body-parser"); var router = express.Router(); router.route("/test").post(function(req,res){ console.log(req.body) response = {"error" : false,"message" : "api worked"}; /*I want to emit a message via socket here */ }); app.use('/',router); app.listen(3010); console.log("Listening to PORT 3010"); 我怎么办,我见过很多使用套接字的例子。 但是我找不到我想做的事情。 […]

Socket.io教程创build额外的消息

我正在关注Socket.IO教程 ,但我遇到了一个问题,即页面上显示的消息数量呈指数级增长,导致聊天客户端无效。 一些粗略的search告诉我,它涉及事件处理程序,但我还没有发现任何关于如何在这种情况下使用它们的确定性。 什么和我需要在哪里使用这些事件处理程序,为什么? 我的index.js: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ // console.log('a user connected'); // socket.on('disconnect', function(){ // console.log('user disconnected'); // }); socket.on('chat message', function(msg){ //console.log('message: ' + msg); io.emit('chat message', msg); }); }); http.listen(8080, function(){ console.log('listening on *:8080'); […]

Chrome,NodeJS和HTTPS

这是我的服务器端: var fs = require('fs'); var options = { key: fs.readFileSync('/cert.key'), cert: fs.readFileSync('/cert.crt') }; var app = require('express')(); var http = require('https').Server(options, app); var io = require('socket.io')(http); var port = 1234; app.get('/', function(req, res){ res.sendFile(__dirname + '/../subdomains/labs/socketio.html'); }); io.on('connection', function(socket){ socket.on('chat message', function(msg){ io.emit('chat message', msg); }); }); http.listen(port, function(){ console.log("\n\n——————————–"); console.log('Currently Listening on port […]

socket.io:如何控制和检查消息stream?

可以说我们有鲍勃和爱丽丝: 鲍勃向爱丽丝发送一个问题,如果爱丽丝得到这个问题,爱丽丝将回答鲍勃,如果鲍勃得到答案,通信完成! 场景: 在io.to('alice').emit('question'); 爱丽丝失去了她的连接,并断开连接,我们使用disconnect事件,并发送通知给鲍勃: io.to('bob').emit('hey bob alice is disconnected and she did not received your question); 在发射过程中突然断开连接并重新连接! 它们之间似乎没有任何实际的转移,对吗?我们怎么能在服务器上捕捉到这种场景呢? socket.io(node.js)中是否存在任何callback或者其他东西,使我确信消息传递给爱丽丝?

Socket io。 禁止自动join由套接字ID标识的房间

在文档中说:“Socket.IO中的每个Socket都由一个随机的,不可测的唯一标识符Socket#id来标识。为了方便起见,每个套接字自动join由这个id标识的一个房间。 我想知道是否有一个选项来禁用此function。 我的解决scheme是: io.on('connection', function (socket) { leaveDefRoom(socket); […] } function leaveDefRoom(socket){ var room = socket.adapter.rooms; for (var key in room){ if (key.charAt(0) == '/') { socket.leave(key); return; } } }

ExpressJS,MongoDB + Socket.IO – 识别单个用户会话

我使用https://github.com/sahat/hackathon-starter/tree/es6 。 我添加了Socket.IO,但无法find安全获取当前login用户信息的方法。 我有一个button,当按下时,我想发送到服务器(用户名,余额和金额,所以我可以安全地更新他们的模式模型…到目前为止,我能够如此与玉,但我敢肯定,这是非常糟糕的。 玉: .content-r-inner.child .col-md-12.col-xs-12.col-lg-12.no-pad-home if !user include partials/flash include partials/visitorbar else include partials/userbar | #time.timecontainer.pulsing.pulsingbox | .product Product: | input#amount(type='text') | #slider-range-max | #minus1.minus.unselectable – | #plus1.plus.unselectable + // </div> .sendAmount(onclick="GetAmount()") // inside include partials/userbar I have GetAmount Function function GetAmount(){ socket.emit('getAmount', { "username": "#{user.username}", "maxBalance": "#{user.balance}", "getAmount": document.getElementById('amount').value }); } {user.username}你可以看到里面的标签… […]

如何检测事件不会从最后两分钟触发

我正在为pipe理员和客户进行实时聊天(nodejs + socketio + express)。 在客户等待超过两分钟的时间内进行pipe理员响应时,我需要向客户端显示消息“请稍后再试” 例如客户端从这个事件获得响应 socket.on('Admin Response',function(msg){ }); 如何跟踪这个事件不会从最后两分钟触发?

Socket.io – 广播给不同权限级别的用户的策略

使用socket.io将事件和数据广播给其他监听器是很简单的,每个人都可以看到数据。 但是,当每个用户只能看到属于他们的数据时,有没有一些策略可以使用? 例如,我们有一个订单系统。 在仪表板上,一些用户可以根据访问级别查看所有订单。 所以如果一个订单被一个用户更新,我可以把这个事件广播给所有其他的用户,而不必为仪表盘上的每个窗口检索新的数据。 所以也许一个例子就像客户端的socket.send('ordersUpdated', data) ,我认为节点服务器可以捕获它,并将数据发送到其他套接字侦听ordersUpdated事件。 但是用户只能看到他们自己的订单的情况呢? 我不能向他们广播相同的数据,因为这个级别的每个用户只能看到他们自己的数据。 如果他们的一个订单是由一个可以看到所有订单的用户修改的呢? 他们的仪表板也需要更新,但他们不能接收同样的广播数据。 有什么特别的方法可以解决这个问题吗? 一个想法,虽然我认为不是一个好主意,但只是发送一个事件,说一些更新的事情,这将导致他们从服务器重新获取数据。 为了提供更多的细节,我也使用Angular和Laravel。