Articles of socket.io

使用node.js / socket.io构build一个实时的大型多人游戏有多昂贵?

您好,我正在尝试使用node.js和socket.io构build一个实时多人游戏。 现在,在编码方面实现本身并不是什么大问题,但是来自传统的http请求响应web编程模型,我不知道在stream量和服务器负载方面会有多昂贵。 基本上在游戏期间,玩家的浏览器应当跟踪实时的鼠标input事件,并且将其广播给同一游戏中的所有其他玩家。 下面是一个例子,假设我的头像围绕我的鼠标指针在屏幕上显示,并且应该实时播放给屏幕上的其他玩家。 我会做这样的事情: // client side $(document).on("mousemove", function(event){ io.emit("coordinate", {x: event.pageX, y: event.pageY}); }); 并在服务器上: // server side io.sockets.on("connection", function(socket){ … socket.on("coordinate", function(coordinate){ socket.get("username", function(err, username){ socket.broadcast.emit("move", {username: username, coordinate:coordinate}); }); }); … }); 我认为这应该起作用,但是这需要浏览器每秒向服务器发送几个事件,随后应该向同一游戏中的其余玩家广播它们,并且我担心这个事情的含义。 有一件事是,每个传输的数据片段的大小不是那么大(基本上只是一个x和y坐标)。 如果这太贵,不pipe这个游戏多么伟大,我都不认为我能发货。 谁能开导我吗? 谢谢。 [编辑]澄清,我不问如何使这个架构更有效率。 我只想知道这种types的系统在系统负载(和维护成本)方面是否足够现实对于普通的Web服务,我可以通过查看页面视图数字来估计成本,但websocket是一个全新的领域,我不知道的,所以我想问。

安全的Node.js聊天(避免XSS)

我正在与Node.js和socket.iobuild立一个简单的小聊天 当用户键入他的消息时,它被广播给所有其他用户。 服务器发送消息: io.sockets.emit('fromServerToClient', { "message": message }); 客户端显示它: socket.on('fromServerToClient', function (data) { $('#messages').append(data.message + '<br />'); }); 但是当你发送像<script>alert(1);</script> ,它会在每个客户端浏览器上执行。 这是一个严重的安全缺陷,我想尽可能避免它。 我看到有人逃跑,但是我不认为这是足够的! 我怎么能100%确定我的聊天没有XSS漏洞? 顺便说一下,我总是指定字符集以避免UTF-7攻击。 谢谢你的帮助。

Socket.io + Express + Node + Angular通知

我有一个应用程序,我试图为客户做一个队列系统。 我试图做到这样,当一个客户join队列时,它会通知店员join,让他们知道,并尽快帮助客户。 不过,我似乎无法让Socket IO与我的前端进行交stream。 这里是我有的代码,我甚至无法让Node将Socket识别为一个库。 我跟着3个不同的教程,并尝试所有,但我不明白我的服务器代码中做错了什么。 这是我在我的服务器与Socket.io有关的事情 var express = require('express'); var app = express(); var io = require('socket.io'); io.on('connection', function(socket){ socket.emit('connection', "Connection created.") console.log("Socket.io is GO"); socket.on('add customer', function(customer){ console.log("Customer added", customer); }) socket.on('notification', function(data) { console.log("NEW CUSTOMER IN THE QUEUE", data); }); }); 我似乎无法让它在我的服务器上运行,当它运行时,它没有显示任何我在那里的socket.on事件,它不会console.log任何东西。 我究竟做错了什么? 有没有人成功地获得Socket与Express和Angular一起玩好?

额外的参数与socket.io

我怎样才能发送额外的参数与socket.io中的连接? 所以当一个客户端连接时,他们会发送额外的信息,并在服务器端收到 io.on('connection', function(client, param1, param2, param3) { // app code }

我应该在什么端口上运行我的Socket.IO服务器?

有没有build议的端口来运行Socket.IO服务器? 目前,我在端口6001,6002和6003上运行Socket.IO。但是,我发现有些人连接到它们时遇到问题,所以我想知道是否有更好的使用方法。

如何将项目Expressjs与jQuery-File-Upload整合?

jQuery-File-Upload与Nodejs很好地协作,但我发现很难与Expressjs集成。 有什么build议么? 感谢您的关注。 PD: https : //github.com/blueimp/jQuery-File-Upload

在node:socket.io或net模块中创build客户端 – 服务器TCP连接

我是节点的新手,我想创build一个客户端和服务器之间使用node.js的TCP连接。 我已经有一个build立在节点上的HTTP服务器,它向客户端发送/从客户端发送/接收数据。 现在,我需要添加这个“连接”的概念。 我一直在阅读教程和论坛,我有点困惑。 如果我理解的很好,有两种方法可以创build这种连接: 将我现有的http服务器升级到socket.IO服务器 var app = require('http').createServer(handler); var io = require('socket.io').listen(app); function handler(req, res){ //code } app.listen(8080); 创build一个基于networking模块的单独的TCP服务器,然后build立这个TCP服务器和HTTP服务器之间的连接,就像这里所build议的那样在node.js中的TCP服务器和HTTP服务器之间创buildWebSockets var net = require('net'); net.createServer(function (socket) { socket.write('Hello World!\r\n'); socket.end(); }).listen(1337); 那么,我们什么时候需要创build两个单独的TCP和HTTP服务器,什么时候我们只需要一个服务器(将HTTP服务器升级到一个socket.IO)呢?

使用属性上的删除时,Javascript对象内存pipe理

我目前正在编写一个node.js / socket.io应用程序,但问题是一般的JavaScript。 我有一个关联数组为每个客户端连接存储颜色。 考虑以下: var clientColors = new Array(); //This execute each new connection socket.on('connection', function(client){ clientColors[client.sessionId] = "red"; //This execute each time a client disconnect client.on('disconnect', function () { delete clientColors[client.sessionId]; }); }); 如果我使用删除语句,我担心它会造成内存泄漏,因为以client.sessionId值命名的属性(关联数组是对象)不会被删除,其引用的值将变成gonne,但属性仍然会存在于对象中。 我对吗?

如何使用快递发布请求发射Socket.io或Sockjs?

我知道这个问题是有点尴尬,但问题来自三星电视2010/2011年智能电视(和蓝光播放器;当然2012年模拟器工作正常)。 我将简单的聊天示例从源代码和包装中移植到SmartTV应用程序中。 他们都回落到JSONP轮询,但从SmartTV应用程序只能发射/推到服务器一次。 从服务器接收消息可以多次没有任何问题。 在三星D论坛(当然没有什么)寻找答案后,我认为解决这个问题的最快方法是部署一个Express服务器,取出后数据和JSON.parse,然后在内部发送Socket.io / Sockjs在服务器本身内部。 有人可以给我看一个简单的示例代码,所以我可以从那里开始? 非常感谢。 我很快做代码,但似乎不起作用: LIB / server.js var express = require('express') , app = express.createServer() , io = require('socket.io').listen(app); app.listen(80); app.use(express.bodyParser()); app.get('/', function (req, res) { res.sendfile('/var/www/mpgs_lite_v3/index.html'); }); app.post('/', function(req, res){ console.log(req.body); io.sockets.emit('my other event', req.body); res.redirect('back'); }); io.sockets.on('connection', function (socket) { //socket.emit('news', { hello: 'world' }); socket.on('my other […]

检索io.socket中的所有套接字对象

我期待从io.sockets获得所有的个人套接字对象,并遍历每个套接字对象。 就像是: for (socket in io.sockets.something()) { // do something with each socket } 要么我做错了,要么就是错过了一些东西。 思考?