Tag: socket.io

socket.io私人消息

我一直在网上search,没有运气。 我想弄清楚如何发送一个用户的私人消息到另一个。 有很多片段,但我不确定客户端/服务器的交互。 如果我有要发送到的套接字的ID,如何将它发送到服务器,以及如何确保服务器只发送消息到该接收器套接字? 有没有人知道的教程或演练?

NodeJS的高延迟

这个问题特别针对Nodejitsu,但类似的效果似乎发生在其他VPS上。 我有一个使用socket.io的实时游戏,有一件事我注意到,偶尔服务器会在响应之前等待过多的时间。 如果在该时间段内发送了多个请求,则它们的行为就好像它们已经全部排队并一次处理。 我怀疑它与共享的硬件上其他用户的存在有着模糊的关系(就像任何VPS一样)。 无论如何,要testing这个(并确保它不是由于我的游戏的代码),我build立了一个最小的testing用例: express = require('express') http = require('http') app = express() server = http.Server(app) io = require('socket.io').listen(server) io.sockets.on('connection', function(sock){ sock.on('perf', function(data, cb){ cb([Date.now()]); //respond with the current time }) }) app.get('/', function(req, res){ res.header("Access-Control-Allow-Origin", "*") res.header("Access-Control-Allow-Methods", "HEAD,GET,PUT,POST,DELETE") res.header("Access-Control-Allow-Headers", "X-Requested-With") res.end(JSON.stringify([Date.now().toString()])); //http equivalent of perf function }) server.listen(process.env.PORT || 6655, function(){ console.log('listening now') […]

如何使用reveal.js的服务器端演讲者笔记

我想使用reveal.js的服务器端音箱笔记,以便在笔记本电脑上运行我的演示文稿时,可以使用其他设备切换幻灯片。 我按照reveal.js github页面上的说明进行操作 ,现在已经完全安装了。 我可以在笔记本电脑上使用笔记本,而不会出现任何问题。 所以我按照这些说明尝试了服务器端的说话人笔记。 因此,当我运行服务器并使用浏览器转到localhost:1947时,会打开一个popup窗口,看起来像普通的演讲者笔记页面。 我现在有三个问题: 1)我的笔记不显示在popup页面。 尽pipe他们在正常的演讲者笔记页面中做过。 2)如果我浏览popup页面中的幻灯片,他们不会在主页面中更改 3)popup页面中的“即将到来”部分不会更新。 但在正常发言者的笔记中却是这样做的。 我正在使用一个Ubuntu 13.10 64位系统。 我已经安装了node.js v0.10.26,express 2.5.8和grunt v0.4.4。 我还使用以下方法安装了socket.io: sudo npm install socket.io 这可能是一些兼容性问题,或者是我做错了什么? 我从来没有与node.js或socket.io工作,所以我不知道在哪里看。 编辑: 我在这里添加一个简单的例子。 虽然为了使用它,你需要把它放在index.js目录中,并使用以下命令安装插件: npm install 那么为了运行它input这个命令: node plugin/notes-server/ 你还需要安装node.js和grunt。 运行后,您可以从本地主机:1947年打开幻灯片。 当你打开这个页面时,会popup一个注释页面,你应该可以在主页面上更改幻灯片。 不幸的是我不能。 index.html的: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>minimal sample</title> <link rel="stylesheet" href="css/reveal.min.css"> <link rel="stylesheet" href="css/theme/default.css" […]

node.js应用程序突然将CPU加载到100%并挂起

我在linux虚拟机上运行的node.js上有简单的应用。 它侦听tcp消息并使用socket.io库将它们发送给客户端。 经过一段时间的低CPU使用率之后,它突然开始加载CPU,直到应用程序挂起。 脚本很简单,我不明白它有什么问题。 var net = require('net'); var io = require('socket.io').listen(socketPort); net.createServer(function (socket) { socket.setEncoding("utf8"); socket.on('data', function (dataStr) { console.log("TCP dataStr " + dataStr); var data = JSON.parse(dataStr); io.sockets.in(data.room).emit('publish', data); }); }).listen(tcpPort); io.sockets.on('connection', function (socket) { socket.on('subscribe', function (room) { console.log('subscribe room ' + room); if (Array.isArray(room)) { var i; for (i = 0; […]

socket.io聊天的例子 – sails.js

所以我试图将socket.io集成到我的sails项目中。 不过,我在sails.js网站上发现了很less的文档。 我试图在我的服务器的两个浏览器之间build立一个聊天。 在客户端我有: io.socket.get('/posts/testStream', function serverResponded (body, JWR) { // JWR ==> "JSON WebSocket Response" console.log('Sails responded with: ', body); console.log('with headers: ', JWR.headers); console.log('and with status code: ', JWR.statusCode); io.socket.on('messege', function onServerSentEvent (msg) { console.log(msg); }); // first argument `body` === `JWR.body` // (just for convenience, and to maintain familiar usage, a la […]

正确的方法来添加一个朋友路线在node.js和mongoose?

我打算创build一个用户可以添加另一个用户作为他/她的朋友的路线,以便他们可以在他们成为朋友之后相互聊天。 所以基本上一旦用户A向用户B发送请求,用户B将通过socket.io得到关于该请求的实时通知 现在的问题是,我不能拿出我自己的解决scheme,如何实现上述情况,从我所知道的,我应该创build两个路线GET和POST 我正在使用mongoose进行数据库查询,插入,更新和删除 这是我的代码 // GET route for getting the user's information — Simple route router.get('/users/:facebook_name', function(req, res) { User.findOne(facebook_name, function(err, user) { if (!user) { res.json({message: "Couldn't find a user by that name"}); return; } res.json(user); }); }); // POST route for adding a friend router.post('/friendships/create/:facebook_name', ensureAuthenticated, function(req, res) { // What should […]

在将0.9.16升级到1.3.5时,SocketIO发出callback失败

在0.9.16中,我使用socket.emit与callback,以便聊天服务器返回一些数据,我可以根据确认处理结果。 但升级到1.3.5后,我发现这样的控制台错误 Uncaught TypeError:无法读取未定义的属性'apply'。 我做了这样的事情 从网页 socket.emit('userToUser', { 'usename': 'John', 'message': 'hi' }, function(callback){ //callback handled }); 聊天服务器 socket.on('userToUser', function(content, callback){ //do something if(callback) return callback({'result':'success', 'messageid':content.messageid, 'chatid':content.chatid}); }); 当我从客户端删除callback,没有错误。 所以我相信callback中会有一些变化。 我得到的确认和聊天工作正常,但我关心的是控制台错误导致socketio.js Socket.prototype.onack = function(packet){ debug('calling ack %s with %j', packet.id, packet.data); var fn = this.acks[packet.id]; fn.apply(this, packet.data); delete this.acks[packet.id]; }; 伙计们,请帮忙

由于连接不再使用parseCookie方法,我们如何使用express来获取会话数据?

在node.js和express中,有很多例子展示了如何获取会话数据。 Node.js和Socket.io Express和Socket.io – 捆绑在一起 Socket.io和Session? 正如您在访问第三个链接时可以看到的那样,它是一个指向StackOverflow的链接。 有一个很好的答案,但正如在@UpTheCreek的评论中指出的,连接不再有parseCookie方法。 我也遇到了这个问题。 我find的所有教程都使用了connect的parseCookie方法,该方法现在不存在。 所以我问他怎么才能得到会话数据,他说他不知道最好的方法,所以我想我会在这里发布这个问题。 当使用express@3.0.0rc4 , socket.io和redis ,我们如何获取会话数据并使用它来授权用户? 我已经能够使用require('connect').utils.parseSignedCookie; ,但是当我这样做的时候,握手的时候总会得到一个警告/错误, warn – handshake error Error 从我读过的东西看来,这听起来不是一个永久的解决scheme。 UPDATE 好的我得到了session.socket.io在我的服务器上工作。 正如我怀疑的那样,我被困在授权的地步。 我想我可能会这样做是错误的,所以请随时纠正我。 在我的Redis数据库中,我将获得用户的信息。 他们第一次login时,我想更新他们的cookie,以便包含他们的用户信息。 然后下次他们回到网站,我想检查他们是否有一个cookie,如果用户信息在那里。 如果不在那里,我想把它们发送到login屏幕。 在login屏幕上,当用户提交信息时,会根据Redis数据库对该信息进行testing,如果匹配,则会使用用户信息更新cookie。 我的问题是这些: 1)如何通过RedisStore更新/更改cookie? 2)看起来会话数据只保存在cookie中。 如果有人closures了cookies,我怎样才能跟踪页面之间的用户信息? 这是我的适用代码: //…hiding unapplicable code… var redis = require('socket.io/node_modules/redis'); var client = redis.createClient(); var RedisStore = require('connect-redis')(express); var redis_store = […]

Socket.ioerror handling

我有一个Socket.IO的问题。 我想套接字错误后重新连接套接字,但它不会重新连接。 这里是代码: socket = io.connect(host, options); socket.on('connect', this.onConnect); socket.on('error', function() { //here i change options socket = io.connect(host, options); }); 为什么它不创build新的连接? (主机和端口保持不变,并可用于第一个连接)。

使用Redis存储库扩展Engine.IO(vs. Socket.IO)

关于这个话题有几个问题,但没有一个能够解决这个问题。 我正在使用一个redis-store的Socket.IO,我正在准备在交通中碰撞。 我的托pipe公司说:“你需要使用Engine.IO而不是Socket.IO,因为它更有效率”,所以我争先恐后地弄清楚这意味着什么。 像这样的问题似乎有矛盾的答案: Socket.IO构build在Engine.IO之上 Engine.IO增强了Socket.IO降级的地方 Socket.IO 1.0将成为在Engine.IO上运行的第一个版本 所以我看到它的方式: Socket.IO 0.9降级 Engine.IO增强 Socket.IO 1.0将使用Engine.IO 如果您想在多个实例上运行Engine.IO,则必须自己编写该Redis存储 不过, Engine.IO说这是“负载平衡友好”,但没有提到redis。 它必须有某种外部商店,对吧? 但是如果它有多个传输和一个存储,Socket.IO有什么意义呢? 然后我看到Socket.IO 可能会被抛弃 , 高调的公司正在转向 Primus 。 我如何去缩放Engine.IO? 我必须自己写商店吗?