Tag: socket.io

每10秒钟通过socket.io发送数据

我试图build立一个networking应用程序,在地图上显示一个点,并每隔10秒更新一次位置。 我现在解决的方法是每隔10秒通过javascripts超时轮询页面并parsing结果。 这工作正常,但是当有多个浏览器轮询同一个网页时,Web服务器资源显然会飙升。 即使添加memcached作为中间件。 我接下来的想法是每10秒钟用最新的位置信息轮询页面,只需创build一个打开的套接字并通过它发送新的数据。 所以在search之后,我偶然发现了socket.io,它应该正是我想要的,但是我没有得到它的工作。 即使是像下面这样的基本的东西也是行不通的。 它只是在控制台中显示hello world数据一次。 而不是每一秒……这里出了什么问题? 服务器 var io = require('socket.io').listen(1332); io.sockets.on('connection', function (socket) { setTimeout(function(){ sentPosition(socket); }, 1000); }); function sentPosition(socket){ socket.emit('position', { hello: 'world' }); } 浏览器 var socket = io.connect('http://myserver.com:8080'); socket.on('position', function (data) { console.log(data); });

我怎么能拒绝一些用户joinsocket.io中的同一个房间?

现在我使用express4和socket.io 0.9build立在线聊天室。问题是我不希望同一个用户join同一个房间,当他们打开另一个浏览器(或其他浏览器)的标签。我可以得到用户会话(要访问这些房间,用户必须login,当他们login时,“uid”将设置到会话中)。

NodeJS网页服务器滞后

1-2分钟后。 在树莓派上运行web服务器,我得到滞后。 我使用nodeJS,socket.io和sqlite数据库。 我怀疑这个: io.sockets.on('connection', function(socket){ setInterval(function(){ fs.readFile('/sys/bus/w1/devices/'+ tempId +'/w1_slave', function(error, buffer){ // Read data from file (using fast node ASCII encoding). var data = buffer.toString('ascii').split(" "); // Split by space // Extract temperature from string and divide by 1000 to give celsius var temp = parseFloat(data[data.length-1].split("=")[1])/1000.0; // Round to one decimal place temp = […]

通过websockets的Node.js JSON格式化问题

我有以下Node.js代码,调用天气web服务来获得json repsonse: var reqGet = https.request(optionsgetmsg, function(res) { console.log("statusCode: ", res.statusCode); // uncomment it for header details // console.log("headers: ", res.headers); res.on('data', function(d) { console.info('GET result after POST:\n'); process.stdout.write(d); console.info('\n\nCall completed'); }); return d; }); 当我使用process.stdout.write(d)到terminal的输出是相当JSON格式的文本,如下所示: { "response": { "version":"0.1", "termsofService":"http://www.wunderground.com/weather/api/d/terms.html", "features": { "geolookup": 1 , "conditions": 1 } } , "location": { "type":"CITY", "country":"US", […]

heroku基于heroku socket.io服务器的空闲连接超时

有时我的套接字服务器引发了以下问题: 这里的heroku日志: heroku[router]: at=error code=H15 desc="Idle connection" method=GET path=/socket.io/1/websocket/RcjG0Zjot1U3uwLWX9SI host=www.*********.** request_id=69f5aa39-255b-4871-a928-1548ef2fdd4f fwd="217.200.201.210" dyno=web.1 connect=0 service=306473 status=503 bytes=870 我使用socket.io库版本0.9.x和节点0.8.x. 它是在heroku上启动的websocket(heroku实验:启用websockets -a myapp)。 我没有使用xhr-polling 以下是我如何实现套接字服务器: var httpServer = http.createServer(function(request, response) { var pathname = url.parse(request.url).pathname; if(pathname == "/") pathname = "index.html"; if(pathname.indexOf("/chat/") != -1 ) pathname = "index.html"; var filename = path.join(process.cwd(), 'public', pathname); path.exists(filename, function(exists) { […]

var socket = io.connect('http:// yourhostname /');?

自从v.1.0发布以来,我再次尝试socket.io。 作为文档, https://github.com/Automattic/socket.io 服务器端: var server = require('http').Server(); var io = require('socket.io')(server); io.on('connection', function(socket){ socket.on('event', function(data){}); socket.on('disconnect', function(){}); }); server.listen(5000); 客户端 var socket = io.connect('http://yourhostname.com/'); 在开发中,肯定是var socket = io.connect('http://localhost:5000/'); 它的工作原理,但我非常不习惯在客户端代码(/index.js)中硬编码主机名(subdomain.domain)。 index.js由http-sever托pipe,而socket.io绑定到此configuration中的http-server。 有没有聪明的方式不硬编码的主机名,但代码相对path? 谢谢。 编辑: 当我尝试: var socket = io.connect('./'); 连接错误: GET http://.:5000/socket.io/?EIO=2&transport=polling&t=1401659441615-0 net::ERR_NAME_NOT_RESOLVED 是这样的,所以至less端口号(5000)是在客户端没有硬编码的情况下正确获得的。

Node.JS + Passport.SocketIO:编辑并保存`socket.handshake.user`属性

我使用Node.JS(0.10.28),Passport.JS(0.2.0)+ Passport-Google(0.3.0)和Passport.SocketIO(3.0.1)。 目前,我可以通过使用req.user在我的应用程序path中访问由Passport.JS创build的用户: app.get('/profile', function(req, res) { // send user data res.send(req.user); }); 使用Passport.SocketIO,我也能够访问用户: io.sockets.on('connection', function(socket) { // get user data console.log(socket.handshake.user); //… }); 也可以通过在app.get/post/all(…)作用域中使用req._passport.session.user.property = new_property_value来编辑req.user并“保存”它。 然后更新显示在io.sockets.on(…)用户对象中。 我的问题是:是否有可能在io.sockets.on(…)作用域中编辑和“保存” socket.handshake.user ,以便更新后的用户将在app.get/post/all(…)显示req.user中的更改app.get/post/all(…) ? 我已经尝试了以下无济于事: io.sockets.on('connection', function(socket) { // rename username socket.handshake.user.username = 'new_username'; //… }); … app.get('/profile', function(req, res) { // send user data res.send(req.user); // […]

列出聊天室中的用户

这是一个重复的问题,虽然我想问一下它的更多的澄清。 我想创build一个使用socket.io的私人聊天。 当用Googlesearch时,我发现了两个解决scheme: 使用数组来存储活动的用户列表 使用房间的概念 假设我的应用程序有数百万活跃用户。 这是我想要的:我有我的朋友列表在MySQL数据库,当我login,我想所有的朋友和他们的地位(活跃与否)。 案例1.如果我使用数组来存储所有活动的用户,那么它工作得很好,但这是一个好方法来存储连接到我的应用程序在数组中的所有用户? 情况2.如果我使用每个用户朋友都有一个独特的roomid的房间概念,那么无论何时用户login,他必须join所有这些房间。 它也适用于我,但在这种情况下,我怎么知道我的朋友是否活跃? 我想知道哪个解决scheme可以为我的应用程序工作,这将有数百万用户,或者有任何其他方式来解决这个问题。

如何在Node.js中实现简单的audio播放?

我正在开发一个简单的Node.js聊天应用程序与socket.io和expression,并希望播放一个简短的audio文件的button点击事件。 相关设置如下: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res) { res.sendfile('index.html'); }); http.listen(process.env.PORT || 5000, function() { console.log("Server running on port 5000"); }); 这是相关的index.html代码: <button onclick="document.getElementById('myTune').play()">Play Music</button> <audio id="myTune"> <source src="sound.mp3"> </audio> 这在基本的html文件在浏览器中运行正常工作,但不是当我在Node中运行时。 我有一种感觉,有一些特殊的设置需要使用Node / express来访问声音文件,但我不确定这是什么。 任何帮助表示赞赏。

node.js socket.io房间的总用户数

我正在计算特定房间中的用户总数,并将其广播给该房间中的所有人。 这是我有,但我得到一个错误: var clients = io.sockets.clients(cc.lowerCase(data.roomname)).length; io.sockets.in(cc.lowerCase(data.roomname)).emit('updatetotal', { total: clients }); 错误: TypeError: Object #<Namespace> has no method 'clients' 谢谢。