Tag: websocket

调用.disconnect()后如何重新连接

问题:在发布手动.disconnect()之后,如何将客户端重新连接到服务器? 在我当前的项目中,当用户从会话中注销时,我需要断开客户端与服务器的连接。 我做了一个socket.disconnect()来成功地断开连接。 服务器从会话中删除用户。 过了一会儿,用户决定再次login,但是socket.io拒绝连接。 我很清楚Socket.IO已经实现了重连algorithm,但显然这是一个不同的情况。 下面是我做连接的一段代码。 在这个代码块的第二个触发器上,创build了对象socket ,但是没有connect被这个对象触发。 //Start the socket var socket = io.connect(SOCKET_IO_URL); socket.on('connect', function() { me.fireEvent('connect'); socket.emit('register', { hashed_identifier: hashed_identifier, account_id: account_id }); }); socket.on('ready', function() { me.ready = true; me.log('Handshake done. Listening for new data'); }); socket.on('data', function(data) { me.fireEvent('data', data); //Tells server we received it socket.emit('data', {ack: 1}); }); […]

与护照使用WebSocket

当有人打开WebSocket连接时,如何访问当前会话的护照login? 我发现了一个很好的项目expression,这似乎工作得很好 app.ws('/', function(ws, req) { ws.on('message', function(msg) { console.log('express-ws — ', msg); }); console.log('socket', req.user); //current user == req.user }); 但是,我怎样才能获得这个相同的信息与一个简单的WebSocket连接? var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 3001 }); wss.on('connection', function(socket){ //Where is the current user???? console.log('connection'); socket.on('message', function(message){ console.log('message received', message); }); }); (这第二个连接确实工作正常 – 但我不能为我的生活find任何方式从Passportlogin信息)

在Chrome和Firefox上,Socket.io无法向Node服务器发送消息

我试图找出我的代码/设置有什么问题now.Basically我想发送一个消息从客户端到服务器。 除 FF(11)和chrome(18.0.1025.152 m) 以外 ,以下所有浏览器都可以使用 。 这里是一些信息: 我在Windows 7企业版64位机器上运行Node.js 我使用Apache来从本地主机提供页面 我用socket.io在端口8080上监听 它看起来像铬和FF后备到xhr轮询/ jsonp轮询,而不是使用套接字 我可以从服务器推送消息,但是我不能从客户端发出消息 服务器代码: var io = require('C:/Users/shlomis/node_modules/socket.io/lib/socket.io').listen(8080); io.sockets.on('connection', function (socket) { socket.on('my event', function (msg) { console.log("DATA!!!"); }); }); 我找不到一个完整path的方法 客户代码: <!DOCTYPE html> <html lang="en"> <head> <title>Hello World!</title> <meta charset="utf-8"> <script src="http://localhost:8080/socket.io/socket.io.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ var socket = io.connect('http://localhost:8080'); […]

websocket,socket,io,sockjs,meteor…如何做出select的困惑今天

我即将做出一个协作编辑应用程序的决定。 我调查了websockets,坦率地说我很困惑。 这里我的发现迄今为止: 有很多关于websocket的文章 – 但是很多是2009年的,2010年的…通常有信息,websockets不能在所有的浏览器和/或实现蹩脚的function不全…今天的地位是什么? 有很多的框架 – 但主要是节点。 我们的应用程序是在RoR中,Eventmachine / em-websocket看起来已经有一年了 – 是否仍然会满足今天的要求? Socket.io,SockJS,meteor…有这么多,我将无法尝试所有,但我做了一些与SockJS的第一次试验。 我们的应用是二进制数据的协作编辑; 多个用户可能正在编辑同一个文档,而多个用户可能同时在不同的文档上工作。 因此,可伸缩性是关键; SockJS似乎不能扩展超过一个服务器(粘性会话)。 此外,客户需要同行更新 – 我是否需要广播设施? 我需要redis吗? 我想我的问题可以归结为: 对于我们的应用程序,我应该直接使用websockets并自定义还是使用框架? 如果一个框架,哪一个更适合我们的特定需求? 我知道这些问题有点含糊,但我首先想了解技术在何处做出正确的决定。 谢谢!

在iOS上,Socket.io与屏幕closures断开连接

我正在使用Node.js和Socket.io开发一个作为Web应用程序的纸牌游戏。 作为具有Nexus 5和最新操作系统的Android用户,以及最新版本的Chrome手机,我没有遇到任何问题。 在使用iPhone 5并熨平了一些小问题之后,我注意到当手机屏幕closures时,sockets断开连接。 我有服务器端日志logging(我正在运行云9服务),说他们断开播放器的身份证(这恰好是套接字标识符)。 在Android上closures屏幕似乎没有任何问题,并且只有当我通过从开放式应用程序/多任务处理视图中将其滑离应用程序完全退出应用程序时,它才会断开连接。 如果一个Web应用程序为每个WebSocket连接到单独的游戏创build一个新的玩家,如果每次屏幕closures时该玩家从游戏中移除,就变得毫无用处。 任何想法可能导致这个或任何configuration的变化,我可以做到这一点会阻止这个? 我试过谷歌search,但似乎无法find任何相关的问题。 编辑 – 使用JavaScript的socket.io

UnitySocketIO-WebSocketSharp挂在使用Unity webplayer的握手循环上

我正在使用UnitySocketIO-WebSocketSharp连接到一个node.js服务器。 如果我在独立模式下在Unity上运行应用程序,一切顺利; 握手正常发生,websocket运行平稳。 但是,如果我在webplayer模式下运行,套接字只是给我一个永恒的握手循环。 我在Unity上使用的代码就是这个例子中的代码 。 在服务器上,我正在使用crossdomain.xml , 这就是我用作服务器 这是服务器的输出。 蓝色箭头表示我玩Unity场景的时刻:

node-http-proxy websocket代理和中间件

我想反向代理使用websockets的现有应用程序,但使用应用程序中间件在应用程序前面实现授权层。 节点http代理广告这两个function,但我似乎无法结合起来。 反向代理websockets工作正常: var httpProxy = require('http-proxy'); httpProxy.createProxyServer({ target: 'http://127.0.0.1:8888', // where do we want to proxy to? ws : true // proxy websockets as well }).listen(3000); 当我看一下中间件的例子 ,他们似乎都使用连接的服务器,并在那一点上的websocket支持似乎消失。 例如。 var httpProxy = require('http-proxy'), connect = require('connect'); var proxy = httpProxy.createProxyServer({ target: 'http://localhost:8888', ws: true }); connect.createServer( connect.compress({ // Pass to connect.compress() the options // […]

添加force-ssl包到Meteor项目已经使用appcache

我有一个Meteor项目,它使用appcache包在浏览器中保存Meteor应用程序的caching。 现在我已经购买了SSL证书,并希望开始强制用户连接到该网站的https://地址。 所以我添加了force-ssl包。 但是,当用户访问http://example.com Meteor应用程序的caching版本时,它将获取caching更新通知,并尝试开始下载新版本的应用程序。 所以http://站点现在正在尝试从https://站点请求资源,并且由于CORS问题,浏览器阻止了这些资源。 我已经玩了一下force-ssl包,甚至尝试设置一些头文件: var host = url.parse(Meteor.absoluteUrl()).hostname; res.setHeader('access-control-allow-origin', 'http://' + host); res.setHeader('access-control-allow-credentials', 'true'); res.setHeader('access-control-allow-methods', 'POST, GET, OPTIONS'); 但是我仍然看到像这样的CORS错误: GET https://www.example.com/sockjs/881/y6to3ysz/xhr 405 (Method Not Allowed) 任何人都知道如何正确设置标题,以便更新可以通过https://到http://网站? 我正在设置socksjs头文件等下拉兔子洞,并认为可能有人已经这样做,可能会节省我一些时间。

WebSocket握手期间出错:意外的响应代码:500

我在我的网站上使用websocket,但随机发送给我以下错误消息: WebSocket连接到'ws://client.mydomain.com/socket.io/?EIO = 3&transport = websocket&sid = 4Kbec5T_XStAC949AACS'失败:WebSocket握手期间出错:意外的响应代码:500 这里是我如何连接到websocket在我的应用程序(注意这是一个Angular应用程序)。 app.factory('clientSocket', ['$sessionStorage', 'socketFactory', function ($sessionStorage, socketFactory) { var connection = ''; $.ajax({ url: 'config.json', async: false, dataType: 'json', success: function (response) { connection = response.app_url; } }); var myIoSocket = io.connect(connection); var clientSocket = socketFactory({ ioSocket: myIoSocket }); clientSocket.forward('someEvent'); clientSocket.on('connect', function () { if ($sessionStorage.activeUser != […]

单页面应用程序,http或websockets,连接/expression完成?

这是涉及单页networking应用程序的问题,我的问题是粗体。 警告:我几乎不是这方面的专家,如果我在理解HTTP和WebSockets的工作方面有错误,请纠正我的错误。 我对HTTP restful API的工作原理是无状态的。 我们使用像connect.session()这样的工具将某种types的状态插入到更高级别的应用程序中。 由于每一个请求都是新的,我们需要一种方法来重新标识自己到服务器,所以我们创build一个独特的令牌来回发送。 Connect的会话中间件以非常酷的方式为我们解决了这个问题。 把它放到你的中间件堆栈中,并且为每个请求附加完整的应用程序。 洒一些握手,你可以相当容易地将该会话信息传递给socket.io,更加棒。 使用RedisStore来保存信息以将其与连接/快速应用程序分离,而且更加棒。 我们在这里说双重彩虹真棒。 所以现在理论上可以有一个不依赖于连接/会话的单页面应用程序,因为在处理websocket时不需要多于一个会话(初始握手)。 socket.io已经让你很容易地访问这个sessionId,问题解决了。 而不是这个authentication工作stream程: 从发布请求中获取电子邮件和密码。 通过电子邮件查询您select的数据库以获取他们的密码哈希。 比较哈希。 redirect到“OK!” 或“NOPE!”。 如果确定,存储会话信息并让connect.session()处理其余部分。 现在变成: 听取login事件。 从事件callback中获取电子邮件和密码。 通过电子邮件查询您select的数据库并获取他们的密码哈希。 比较哈希。 发一个“OK!” 或“NOPE!” 事件。 如果确定,做一些我现在不会想到的东西,但同样的效果应该是可能的? 通过使用连接我们还能从中受益吗? 以下是我常用的列表: logging器的开发模式 图标 bodyparser 静态服务器 护照(取决于连接/快递的authentication库,类似于everyauth提供的) 加载初始单页面应用程序的代码将处理设置一个静态服务器和favicon。 像护照这样的东西可能会更棘手的实施,但肯定不是不可能的。 我列出的其他一切都无关紧要,您可以轻松地为websockets实现自己的debugginglogging器。 现在有什么阻止我们有一个单一的基于http的index.html文件封装一个websocket连接,并不依赖于连接呢? 如果你想要一个单一的页面应用程序,同时通过其自动魔法回退提供交叉浏览器支持,socket.io是否真的能够使这种types的应用程序体系结构工作,而无需设置自己的HTTP宁静API? 现在唯一真正的缺点是在客户端caching结果? 难道你不能为本地存储? 我认为为search引擎创build可索引/可抓取的内容页面并不是什么大不了的事情 – 你基本上会创build一个工具,从持久化数据库中创build静态html文件吗?