Articles of 套接字

有没有可能有一个IRC客户端使用运行你自己的IRC服务器没有websockets网关的websockets?

我正在计划build立一个IRCnetworking,并正在探索选项。 我打算使用Inspircd IRC服务器 。 随着运行meteor的networking服务器。 是否有可能build立一个networkingIRC客户端与WebSockets和不使用Webscokets网关(以减lessWeb服务器上的负载),并直接连接到IRC Inspircd框? 其次,如果是,则IRCclient <-> IRCServer与IRCclient <-> WebScoketGateway (/webserver) <-> IRC Server关系有什么优点/缺点。 我看到大部分涉及node或meteor的模块(包括socket.io )都使用WSGI,为什么呢? 我在这里错过了什么? 请注意在这种情况下,IRC服务器和Web服务器都由我运行,因此使浏览器相信两者都是相同的盒子的可能性。

使用tcp_nodelay发送大消息时出现奇怪的滞后

我正在写一个交stream程序,通过tcp连接发送一个bash shell的输出。 为了让我的程序更具响应性,我使用setsockopt()来启用TCP_NODELAY,它禁用了Nagle的缓冲algorithm。 这工作很好,除非很less有大消息滞后。 如在,如果消息超过大约500字节(可能是512)。 前500个字节会通过(快速地在小信息中),然后在1-2秒内延迟,其余的一次被接收。 这只发生一次,每10-15次收到一个大消息。 在服务器端,消息一次一个字节地写入套接字,并且所有的字节都可用,所以这种行为对我来说是意想不到的。 我最好的猜测是,有一个512字节的缓冲区在sockets的某个地方导致一个块? 我做了一些时间testing,看看滞后在哪里,我非常确定这是发生滞后的套接字本身。 服务器端的所有数据都是无阻塞地写入的,但客户端收到滞后后的消息结束。 但是我使用getsockopt()来查找套接字的接收和发送缓冲区,它们分别大于512字节 – 66000和130000。 在客户端,我使用express js来接收处理程序中的数据(app.on('data',function(){}))。 但是我读到这个expression函数不会缓冲数据? 有人会猜测为什么会发生这种情况吗? 谢谢!

node.js,socket.io – 网站架构

我有一个网站,我想有一个用户系统,无论用户在哪个网站login,都可以login 。 使用socket.io,我发现每个HTML页面都需要自己的socket.io连接。 所以每次用户离开一个HTML页面时,他都会断开第一个socket的连接。 保持这种联系的最好方法是什么? 我不希望用户手动login每个HTML页面。 我假设将login数据作为HTMLparameter passing,并自动使用这些参数login到服务器是非常愚蠢的,但目前它是我能想到的唯一的解决scheme。 理想情况下,socket.io将在整个站点上使用相同的套接字。 我认为我错过了一些东西,考虑到所有具有用户系统的网站都具有所需的function。

在socket.io范围外使用var

我正在nodejs聊天,我想在socket.io范围外使用var用户,但它不断给我一个undefined 这里是我的代码,设置用户变种 socket.on('bio', function(data) { for (var i = 0; i < data.length; i++) { users[data[i].name] = { avatar: data[i].avatar, steamid: data[i].steamid, name: data[i].name, userid: data[i].id, admin: data[i].admin } } }); 在这里我尝试使用它,但它说它未定义 textarea.addEventListener('keydown', function(event) { var self = this; if (event.which === 13 && event.shiftKey === false) { socket.emit('input', { timeStamp: moment().format("YYYY-MM-DDTHH:mm:ss"), name: chatName, userid: […]

套接字 – 活动套接字的最大限制

我用ws (一个套接字库)来处理套接字使用node.js。 我读过这个链接 ,声称任何VPS机器可以有多达64K客户端端口。 现在的问题是,我的Linux VPS上有多less个活动套接字? 有一个理论的限制,一个Linux VPS可以处理多less个开放的套接字? 瓶颈是什么? 是RAM吗? 或带宽?

MongoLab上的Node.js和MongoDB:每个插入上的“套接字closures”

我试图做一些相对简单的事情,每当我尝试做一个“插入”,突然间就会遇到“服务器…- a.mongolab.com:36648套接字closures”错误。 读取似乎没有错误的工作,但插入似乎每次都会得到一个错误,我不知道它是我的代码(最近进行了一些小的改变),或者我在MongoLab使用的免费服务器的可靠性问题最近performance出下降几分钟)。 奇怪的是,logging本身似乎保存没问题,我只是把错误回来了! 任何人都可以看到我的代码问题,或者这可能是别的? var mongoClient = require('mongodb').MongoClient; var http = require('http'); var connectionString = "…"; var pictureWallsCollectionName = 'PictureWalls'; //this is what barfs. see *** details exports.saveWall = function (req, res) { //reformat var toSave = { _id: req.body.wallId, pictures: req.body.pictures }; var status; mongoClient.connect(connectionString, function (err, db) { if (err) { return […]

Node.js,net.socket,解码西里尔文字符

这是我的代码: var net = require('net'); net.createServer(function (socket) { socket.setEncoding("utf8"); socket.write("Welcome " + socket.name + "\n"); socket.on('data', function (data) { console.log(data); }); socket.on('end', function () { socket.destroy(); }); }).listen(5000); 我使用telnet 127.0.0.1 5000连接到服务器。 我将套接字编码设置为UTF-8。 脚本工作正常,直到我们发送一个包含“一些”西里尔字符的string。 例如: data = абвгдеёжзийклмнопрстуфхцчшщьыъэюя; console.log()输出文件абвгдеёжзийклмнопрст ф цчшщьыъэю 编码有什么问题? 为什么只有几个字符(х,у,я)变成问号? 我把这个问题search了一个小时。 没有find任何决定问你。

Node.js – 当用户因特网丢失时不会触发套接字closures事件

我正在用Node.js和ws编写一个聊天应用程序 有一个closures事件,当用户正常断开连接时触发,但是当互联网丢失时,这个事件不会被触发。 无论如何,我们可以检测到当用户失去了连接?

如何在Node.js中捕获原始请求

我能够使用下面的源代码在Node.js中捕获原始请求。 var http = require('http'); var express = require('express'); var remote = express(); remote.use(function(req, res, next) { req.socket.once('data', function(data) { console.log(data.toString()); }); next(); }); remote.use(function(req, res, next) { res.end('end'); }); http.createServer(remote).listen(8080); 但是这个源可以在包含第二个请求之后捕获原始请求,因为第一个请求在绑定事件处理程序之前被消耗了。 如果客户不使用保持活着,我不能捕获任何请求。 我如何捕获原始请求,包括第一个请求?

Socket.io serverside广播

我想更新服务器上的数组并将其广播到所有客户端。 我面临的问题是我需要客户端参数来广播。 在服务器上: var socket = io.listen(8000); var plateaus = []; setInterval(function () { plateaus.push('new data'); — send the updated array to all clients — }, 1000); socket.sockets.on("connection", setEventListeners); function setEventListeners(client) // loadExistingPlayer(client); <- normally I use the client param } 如何广播更新的数组? 非常感谢!