Articles of 套接字

无法开始使用NodeJS和SocketIO

我正在尝试使用socket.io和node.js来实现基本结构,同时使用('net')实现在node.js的主页上显示的tcpfunction来创build服务器。 由于没有太多的代码,这是我迄今为止 服务器: // Setup the server var tcpProtocol = require('net'); var serverListener = tcpProtocol.createServer(tcpHandler); var socketIO = require('socket.io').listen(serverListener); function tcpHandler(socket) { console.log("TCP Handler received a call."); socket.pipe(socket); } socketIO.sockets.on('connection', function(socket) { console.log("Connection maid."); }); socketIO.sockets.on('login', function(username, password) { console.log("login called."); console.log('username: ' + username); console.log('password: ' + password); }); serverListener.listen(5055, '127.0.0.1'); console.log("Server started on […]

在Socket.io中双重连接

我的问题很简单。 我有一个Node.js服务器与下面的代码 io.on('connection', function (socket) { console.log('connection'); }); 我的网页只包含 var socket = io(); 我在一个窗口中打开应用程序。 然后我打开另一个。 控制台显示三个连接。 如果我刷新其中一个窗口,控制台总共显示六个连接。 我再次刷新,我有10个连接。 再一次,15个连接。 这怎么可能? 我想每页加载一个连接,我怎么能实现这一点。 感谢您的关注! 注意:我不知道它是否重要,但我也使用Express,Mysql和会话

socketIO – 将套接字映射到连接

这个问题的标题是不正确的措辞,但我不知道如何说话。 如果有人想编辑它,请随意。 基本上我想弄清楚如何通过数据来自的套接字来获取播放器的特定实例,这将被用于通过我的服务器传递移动到我的小2D项目。 目前我有一个对象,通过标识号码存储所有的玩家,有些人说这是一个对象,有些人说这是一个hashmap实现,有些人说这是一个数组,无论它是什么,我正在使用它。 var connectedPlayers = {}; 当一个连接被创build时,我创build一个像这样的新玩家: var playerId = Math.floor(Math.random()*(50000-1+1)+1); var userId = Math.floor(Math.random()*(50000-1+1)+1); var player = new Player(playerId, "Guest"+userId, socket); connectedPlayers[playerId] = player; 显然,这只是为了生成随机的名称/标识号码,但是这很好,这是在socket.on('connection', function()调用上执行的。 如果您需要查看Player.js脚本,它只是一个基本的原型脚本,它向所有玩家发送有关玩家login信息,这一切都正常工作。 var playerId; var playerName; var socket; var positionX, positionY; function Player(playerId, playerName, socket) { this.playerId = playerId; this.playerName = playerName; this.socket = socket; this.positionX = […]

socket.io给出了两个响应,但只有一个是被忽视的

我正在写一个使用socket.io的程序。 在这个特定的部分,我发送一个请求并处理答案。 客户端: // …. socket.emit('opendrow', a.id); socket.on('opendrowresponse', function(msg) { console.log(msg); cell.innerHTML = msg; // …. 服务器侧手柄: // …. socket.on('opendrow',function(msg) { console.log(msg); connection2.query('SELECT * FROM testpreis WHERE id = '+msg, function(err,rows,fields) { if (err) throw err; io.to(socket.id).emit('opendrowresponse',rows) }); }); // …. 客户端代码在点击function中: var plusrow = document.getElementsByClassName('plusrow'); for (var i = 0;i<plusrow.length;i++) { plusrow[i].addEventListener('click', collapse); } […]

Nodejs – 如何杀死正在运行的SQLite查询

可能类似的问题: SQL:中断查询 有没有办法中止SQLite调用? 大家好,我实际上使用socket.io和sqlite3模块来执行SQLite数据库上的SELECT查询。 当用户点击一个OpenLayers地图,它发送一个信号给服务器(通过socket.io)来收集信息,通过执行空间请求(如交叉点,union …使用Spatialite扩展),然后最终发回数据到客户端(这些是长时间运行的查询(取决于几何graphics的数量)),以在用户点击的地图上显示一个popup窗口。 问题是:如果用户在地图上多次点击,发送很多请求到服务器,只有最后一个是重要的。 想象一下,如果一个查询需要5秒的时间来执行,并且用户在地图上每秒钟点击3次(他只想要点击的最后一个位置被使用),那么服务器将执行3个查询, 3信号通过socket.io(并打开3popup,我们只需要最后一个被打开)! 有没有任何解决scheme杀死/中止正在运行的sqlite查询与nodejs? 示例代码: socket.on('askForInfo', function (data) { sendInfo(socket, data.latitude, data.longitude); }); sendInfo定义: function sendInfo(socket, lat, lng) { // Database connection var db = new sqlite.Database('some file.sqlite', sqlite.OPEN_READONLY); // Load Spatialite extension db.loadExtension('mod_spatialite', function(err) { // Query doing spatial request db.get("VERY LONG SQL QUERY", function(err, row) { // […]

套接字 – 没有数据显示在客户端网站上

我想通过nodejs通过socket.io发送数据到我的客户端。 我收到的数据来自推送者。 我正在使用快速后端,并像这样加载我的服务器。 #!/usr/bin/env node var debug = require('debug')('testApp'); var app = require('../app'); var Pusher = require('pusher-client'); app.set('port', process.env.PORT || 3000); var server = app.listen(app.get('port'), function () { debug('Express server listening on port ' + server.address().port); }); /** * return pusher data */ var API_KEY = 'cb65d0a7a72cd94adf1f'; var pusher = new Pusher(API_KEY, { encrypted: true […]

Node.js:一次接收太多的UDP消息,丢失它们

我的节点服务器在一秒钟内收到大约400个UDP消息 ,这一切都能正常工作 ,而且我能够处理所有400个消息。 但是,当我开始在一秒钟内收到大约700个UDP消息时, 我失去了2-20个消息,并且它们永远不会被parsing:( 我在这里想过一些select : 创build一个所有套接字消息的队列 ,然后逐个消费,尽pipe我不知道如何实现这个 无法弄清楚如何实施 在Node / Express / dgram套接字find一个设置 ,我可以增加内存大小/缓冲区大小,类似的东西 我找不到像这样的设置,虽然:( 使用不同的UDP接收器 ,停止使用节点的套接字UDP接收器 没有find其他接收器 这是我的UDP发件人的样子: var dgram = require("dgram"); var udpserver = dgram.createSocket("udp4"); var seatStateStore = require("./SeatStateStore"); udpserver.on("message", function (msg, rinfo) { seatStateStore.parseMessage(msg.toString()); }); 有人有主意吗? 我找不出3个选项中的任何一个:/有人可以帮我吗? 节点v0.10.29 Express v3.14.0 =============================== 更新/解决scheme 这里是我最终使用的代码(略微修改@RoyHB的解决scheme): var dgram = require("dgram"); var udpserver = […]

在生产中无法连接到套接字io

生产中无法连接到socket.io。 它在我的开发服务器工作正常,但我没有得到在生产控制台中的“websocket用户连接”消息,我的热图没有填充testing数据。 我在浏览器jscript控制台中得到net :: ERR_CONNECTION_TIMED_OUT。 从服务器: io.origins('http://example.com/path:8080') app.get('/somepath', function (req, res, next) { // code here io.emit('update', data) console.log('update has been emitted') // this prints and I see the data object in the console res.end("OK") }) io.on('connection', function (socket) { console.log('websocket user connected') }); 从angular度控制器: $http.get('http://example.com/somepath?'+str) // hits somepath with test data in query string […]

Raspberry + socket.io在本地networking上工作,但不在外部工作

我有一个Raspberry Pi服务通过一个server.js文件的HTML页面。 主线(不是所有的代码)是: var app = require('http').createServer(handler); var io = require('socket.io').listen(app); … app.listen(8000); … fucntion handler(req,res) { fs.readFile(__dirname+'/../index.html' function(err,data) { … io.sockets.on('connection', function (socket) { setInterval(function(){ … socket.emit('tempUpd',date,temp); }, 2000); }); 在index.html上: <head> … <script src="/socket.io/socket.io.js"></script> … </head> <body> <div id="info"></div> — <script> var socket = io.connect('http://192.168.1.6:8000'); socket.on('tempUpd', function(date, temp){ document.getElementById("info").textContent = temp; }); … […]

信息 – 未处理的socket.iourl

我试图使用套接字来连接到一个节点服务器我运行本地化,但我一直在'info – unhandled socket.io url'在服务器端+ "XMLHttpRequest cannot load http://localhost:8080/socket.io/?EIO=3&transport=polling&t=1424356590540-0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access." 在铬上(使用地址localhost:8000/index.html ) // top six lines of code to see setup var express = require('express'), app = express(), http = require('http'), server = http.createServer(app), io = require('socket.io').listen(server); server.listen(8080); 我也在端口8000上使用python SimpleHTTPServer […]