Articles of socket.io

节点的JS HTML游戏

<!doctype html> <html> <head> <script src="http://localhost:8000/socket.io/socket.io.js"></script> <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script> <script> var name=''; var socket = io.connect('http://localhost:8000'); $(document).ready(function() { //var app = require('http').createServer(handler), //io = require('socket.io').listen(app); //app.listen(8000); //var url = 'http://localhost:8000'; //var socket = io.connect(url); //socket.connect(); //socket.on('movement', function() {socket.send(); //console.log('Connected!');}); while (name == '') { name = prompt("What's your name?",""); } var left =5; var top = […]

用jQuery在客户端添加Jade块的内容

当页面加载时,我有一些从Jade加载的内容(例如,连接的用户列表)。 这个内容是dynamic的,通过socket.io消息通知客户它的变化。 客户端的jQuery脚本必须添加新的内容或删除旧的内容 。 问题是新的内容可能非常复杂(例如,用户的所有信息),我必须在客户端脚本中重写HTML代码(而jQuery不是为此而devise的)。 我试图克隆和编辑现有的结构(可以隐藏),但我认为这不是最好的方法。 例 服务器端 #usersList each user in users .userBox .userName #{user.name} .userCountry #{user.country} .userMail #{user.mail} 客户端 websocket.on('newUser', function(user) { $('<div class="userBox">'+ '<div class="userName">' + user.name +'</div>'+ '<div class="userCountry">' + user.country +'</div>'+ '<div class="userMail">' + user.mail +'</div>'+ '</div>').appendTo($('#usersList')); }); 客户端代码是可怕的。 我想知道我是否可以在Jade中拥有一块内容,然后执行此操作。 websocket.on('newUser', function(user) { $(jade.userBox(user)).apprendTo('#usersList'); }); 如果不可能,最好的方法是什么?

如何知道何时订阅/取消订阅socket.io

刚刚search了所有的networking,以了解如何在通道订阅或取消订阅时跟踪node.js服务器。 我所能做的是知道的是连接和断开绑定,但不知道如何与渠道做到这一点。 io.sockets.on('connection', function (socket) { console.log("["+socket.id+"] Connected"); // handler to know when a socket subscribed a channel (*) ? // handler to know when a socket unsubscribed a channel (*) ? socket.on('disconnect', function () { console.log("["+socket.id+"] Disconnect"); }); }); 可能吗?

node.js socket.io-client + python socketio

我正在尝试使用Socket.IO来允许我的Node.JS应用程序与Python后端进行通信。 我希望Node.JS充当客户端,Python充当服务器,所以除了gevent-socketio python模块之外,我还使用了socket.io-client Node.JS模块。 https://github.com/LearnBoost/socket.io-client https://github.com/abourget/gevent-socketio 这是我的Python服务器: #!/usr/bin/env python from socketio.server import SocketIOServer from socketio.namespace import BaseNamespace class MyNamespace(BaseNamespace): def on_foobar(self,data): print 'received method for foobar' print data server = SocketIOServer(('localhost', 1234),resource=MyNamespace,policy_server=False) print 'SocketIO server listening…' server.serve_forever() 这是我的Node.JS服务器(充当客户端): #!/usr/bin/env node var io = require('socket.io-client'); var PySocket = io.connect('localhost:1234'); PySocket.emit('foobar',{'key1':'value1'}); 出于某种原因,python服务器没有看到连接。 任何人都可以指出我错过了什么?

一旦以前的失败尝试连接Socket.io事件不会触发

这里是场景,我有一个客户端应用程序,由PHP服务于node.js + socket.io应用程序的不同服务器上。 它可以连接和接收从服务器发送的广播。 如果连接断开,应用程序将回退到轮询数据库(使用setInterval() )。 它试图每5轮投票重新连接一次,它可以成功地重新连接并继续接收消息。 我的问题发生在用户加载页面和节点服务器无法到达(我把它closurestesting),然后打开服务器,并在5轮询,它成功地连接到服务器,使用socket.socket.reconnect(); 。 但是,只要服务器广播消息,它就不会触发事件。 请注意,这不会发生在手机上testing(回落到不同的套接字方法) 我已经看到在这里find的问题重新连接socket.io问题在'socket.on('消息',函数(){})` ,但套接字之前没有连接,所以我不认为这可能是会议? 编辑:我将socket.socket.reconnect()更改为socket.socket.connect() ,它解决了这个问题。 如果有人能解释为什么这个作品我想知道的原因。 我知道它是因为服务器实际上没有重新连接,但是想要更多的信息。 谢谢。

发送PHP GET请求到Sockets.IO

我试图从PHP(CLI)发送一个GET或POST请求到一个Node.js / Sockets.IO应用程序,只使用基本的cURL。 这是我到目前为止,我可以看到响应进入node.js(从cli),但不能得到任何更远。 目前我只想把参数发送到控制台。 (我可以在以后扩展) 任何帮助将是伟大的! (仅供参考:我从php源代码看了这个, Socket.io ,但是需要更多的帮助,精确的代码会很棒) PHP $qry_str = "?msg_from_php=This_is_a_test123&y=20"; $ServerAddress = 'http://10.1.1.69/socket.io/1/websocket/TICWI50sbew59XRE-O'; $ServerPort = '4000'; $TimeOut = 20; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ServerAddress. $qry_str); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); curl_setopt($ch, CURLOPT_PORT, $ServerPort); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $TimeOut); curl_setopt($ch, CURLOPT_TIMEOUT, '3'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, true); // not sure if […]

如何在客户端保护socket.io?

我正在开发一个使用socket.io的实时Web应用程序。 我关心的是,在客户端通过这个<script>/socket.io/socket.io.js</script>加载socket.io js文件时,它将io实例公开为全局对象。 现在,如果你打开chrome开发者工具,你现在可以创build一个到服务器的连接 var socket = io.connect(); 任何人现在都可以发送事件并将恶意数据发送到正在侦听客户端发出的事件的服务器。 我以我的客户端代码为例: (function (sio) { var socket = sio.connect(); // some code here… // once a user submitted the comment, it will emit an comment:create event to the // server socket.emit("comment:create", comment); }(io)); 在Chrome开发人员工具中,我可以创build一个连接,然后使用一些恶意参数发出相同的事件,这些恶意参数可能会使应用程序崩溃,例如传递null作为第二个参数。 有没有办法来防止这个问题? 编辑:我目前的解决scheme是在我的客户端代码中创build一个io实例的本地副本,然后将全局io对象设置为null,以防止另一个连接。

如何测量被socket.io内部传输的数据大小

我们知道socket.io不会传输二进制文件。 当我们通过socket.io发送二进制(二进制string)数据时,它会转义并发送给服务器。 我需要多less大小这样的方式添加到二进制string的实际大小,并比较它和base64编码的string大小。 我正在做的是使用socket.io上传文件,我见过很多base64的例子,增加了大约33%的文件大小。 我正在寻找一种安全的方式来上传由socket.io支持的所有浏览器支持的文件,而不会增加大的尺寸。 我知道Websockets传输二进制文件,但问题是与IE8 IE9。 因此,我正在研究二进制string传输。 谢谢

Socket.IO故障检测

如果node.js服务器和客户端之间的链接断开,并且断开连接事件还没有被超时触发,是否有任何方法可以检测客户端发出的特定事件是否不能传递给服务器端由Socket.IO?

socket.io + redis – 幽灵套接字 – 可能吗?

我做了一个应用程序与node.js,socket.io,群集,redis和它运行8个进程。 每个进程有没有可能有一些幽灵套接字? 我的意思是sockets已经断开,但并不是每个进程都知道它,但仍然有它们。 我的应用程序在连接事件中向客户端发送在线计数(来自两个房间的套接字计数)。 并且每3秒发送一个叫做“HEAD”的进程,也对所有的套接字“在线计数”进行发送。 我为什么要告诉它? 当我在浏览器中连接到应用程序时,首先从8个进程中的一个获得“在线计数”,让它成为60,3秒后,我从HEAD进程获得“在线计数”,但是这是非常不同的数字。 所以我认为有些东西不通过Redis同步到进程。 可能吗?