Articles of 套接字

什么是检查游戏状态和发送套接字连接客户端的正确方法?

我正在构build一个社交多人实时游戏,我正在考虑采用什么架构来跟踪状态游戏,并向连接的玩家发送正确的游戏套接字。 我的比赛有四个状态round start , check players , matching state ,全部round result 。 这些状态有10 sec超时时间,并且有空间,而房间有玩家。 我的状态如下所示: var stateDoc = { type: 'round start', uid: uid, timeout: 10000 }; 我的问题是我应该如何存储状态和更新这些?

UDP多播广播节点

我正在尝试创build一个基于UDP多播的聊天程序,这个想法是本地networking上的任何人都可以popup并开始input和发送消息。 我认为每个客户端都需要两个套接字,一个发送消息,另一个接收消息。 简而言之,这就是我现在所拥有的: "using strict"; const multicast_addr = "224.1.1.1", bin_addr = "0.0.0.0", port = 6811; var udp = require("dgram"); var listener = udp.createSocket("udp4"), sender = udp.createSocket("udp4"); listener.bind(port, multicast_addr, function(){ listener.addMembership(multicast_addr); listener.setBroadcast(true); }); listener.on("message", function (b, other) { console.log(b.toString().trim()); }); process.stdin.on("data", function (data){ sender.send(data, 0, data.length, port, multicast_addr); }); (不要介意回声,这是应用程序逻辑将build立在顶部) 这会将消息回显给运行代码的人,但是我也同时在同一台计算机OS X上的linux VM上运行这个消息,但是根本没有看到消息被传递。 我不确定这是否意味着 1)我的代码不正确 2)虚拟机与主机有相同的networking? […]

帆船队长0.5.8超时/冻结

我在用 : 帆0.11.2 船长0.5.8 jqueryfile upload 当我尝试上传我的本地机节点服务器上的大文件时,它工作正常(我已经将maxBytes的值更改为适当的大小)。 但是在等待一分钟之后,将相同的file upload到远程服务器 我收到这个错误: Error: Request aborted FixedIncome-0 (err): at IncomingMessage.onReqAborted (…./node_modules/sails/node_modules/skipper/node_modules/multiparty/index.js:175:17) FixedIncome-0 (err): at emitNone (events.js:67:13) FixedIncome-0 (err): at IncomingMessage.emit (events.js:166:7) FixedIncome-0 (err): at abortIncoming (_http_server.js:280:11) FixedIncome-0 (err): at Socket.serverSocketCloseListener (_http_server.js:293:5) FixedIncome-0 (err): at emitOne (events.js:82:20) FixedIncome-0 (err): at Socket.emit (events.js:169:7) FixedIncome-0 (err): at TCP._onclose (net.js:469:12) [Error: Request […]

Sails.js IO.socket不发射

我有一个AngularJS应用程序,我试图让套接字触发创build/删除我的数据库中的项目。 我从$资源切换到io.socket.post()使用自定义控制器方法('socketCreate'),但不知道为什么我的套接字callback没有触发。 Sails JS控制台logging新用户,创build新用户,angular度从套接字获取数据并刷新列表。 这一切正常工作,但是io.socket.oncallback不会触发。 我没有得到事件的正确性? angular度控制器: $scope.newUser = function() { io.socket.post('/users/socketCreate', {name: $scope.temp_user.name}, function( data, jwres ) { $scope.refreshUsers(); $scope.temp_user = {}; }); }; if( !io.socket.newUserListen ) { io.socket.newUserListen = true; console.log( io.socket.newUserListen ); io.socket.on( 'users', function onServerSentEvent( msg ) { console.log( 'users', msg ); }); io.socket.on( 'user', function onServerSentEvent( msg ) { console.log( […]

如何在多个服务器上使用socket.io-redis?

我有两台机器上的以下代码 var server = require('http').createServer(app); io = require('socket.io')(server); var redisAdapter = require('socket.io-redis'); io.adapter(redisAdaptebr({host: config.redis.host, port: config.redis.port})); server.listen(config.port, function () { 我存储连接到这两台机器上的每个客户端的socket.id中央数据库,套接字的ID被保存,同一台服务器上的事件发送完美地工作,但是当我试图发送消息到其他服务器的套接字它不工作.. subSocket = io.sockets.connected[userSocketID]; subSocket.emit('hello',{a:'b'}) 我怎么知道redis是好的。 如何发送消息到另一台服务器上连接的套接字。

如何检测套接字Node.js中的networking故障

我正在尝试写内部运输系统。 数据应该使用networking套接字从客户端传输到服务器。 除了处理networking问题,它工作正常。 如果我在客户端和服务器之间放置防火墙,双方我都不会看到任何错误,所以数据将继续填充客户端的内核缓冲区。 如果我将在这一刻重新启动应用程序,我将失去缓冲区中的所有数据。 问题:我们有办法检测networking问题吗? 我们有办法从内核缓冲区获取数据吗?

垃圾收集在Node.JS中的套接字

我正在处理一个Node库,它在完成之后没有明确closures套接字。 相反,它试图通过删除对套接字的引用来清理,并让它们被垃圾收集。 谷歌search失败了我:我不认为这是可能的气相色谱来清理未closures的sockets。 也就是说,我认为从操作系统的angular度来看,任何套接字描述符都会被使用。 此外,假设我作为库消费者可以访问套接字对象,那么closures它们的最佳方式是什么? 我用end() , close()和destroy()成功地玩过了。 有时他们似乎阻止永久(结束/摧毁),而其他时候似乎callback从来没有(closures)。

JavaScript中的callback混乱,Node.js

statusDefault = status.textContent, setStatus = function(s){ status.textContent = s;//to set any status if(s != statusDefault){ var delay = setTimeout(function(){ setStatus(statusDefault); clearInterval(delay); },3000); } }; setStatus('Testing..'); 在上面的代码中,我没有得到它的工作原理。 默认状态变为“testing..”,3秒后再次显示默认状态。 我很困惑。 它是如何工作的?

Node.JSnetworking模块处理意外的连接丢失

我找不到我遇到的一个问题。 我在我的Node.JS服务器上使用Net模块来监听客户端连接。 客户端连接到服务器正确,连接保持可读/写数据。 到现在为止还挺好。 但是,当客户端意外断开(当互联网在客户端丢失时编辑),我想触发一个事件服务器端。 在socket.io中,它将使用'disconnect'事件完成,但是这个事件似乎并不存在于Net模块中。 怎么可能呢? 我在谷歌/ StackOverflow和networking文档( https://nodejs.org/api/net.html )上search,但我找不到任何有用的东西。 如果我做错了什么,我很好奇。 这是我得到的代码片段: var net = require('net'); var server = net.createServer(function(connection) { console.log('client connected'); connection.wildcard = false;//Connection must be initialised with a configuration stored in the database connection.bidirectional = true;//When piped this connection will be configured as bidirectional connection.setKeepAlive(true, 500); connection.setTimeout(3000); connection.on('close', function (){ console.log('Socket […]

从套接字获取http-auth用户

我想让http用户进入套接字结构来logging用户的操作。 像在expression: app.get('/', function(req, res){ //req.user }) 我怎样才能从sockets获得用户? 套接字使用相同的http服务器比明确。 这里是代码: var auth = require('http-auth') var basic = auth.basic({ file: __dirname + '/.htpasswd' }) var express = require('express') var app = express() var http = require('http') var server = http.createServer(basic, app) var io = require('socket.io')(server) io.on('connection', function(socket) { //Get http user ? }) 谢谢 :)