Tag: tcp

Tcp服务器在一段时间后不能接受连接

我在nodejs中实现tcp服务器,它接受来自gps设备的连接,代码被永远监视。 代码不会崩溃,但在一定的时间后,服务器不接受任何新的连接。 一旦我重新启动服务器,它再次正常工作。 我没有任何线索是什么错误。 OS Ubuntu 14.04。 任何帮助表示赞赏。 编辑: 时间之后,服务器不接受连接是6天左右。 net.createServer(function(sock){ sock.on('data',function(data){ //converting data to ascii. //parsing data,doing calculation //fetching user_id from redis.(i will get device id from gps device, there are user_id associated to device ids). //posting to api using rest-client }); }); 编辑2:有什么与虚拟内存的大小。 虚拟内存大小约为940mb。 ?

绕过node.js中的套接字连接

我正在一个项目中,我们需要将客户端连接到LANnetworking后面的设备。 简要说明:在家中,例如在由路由器创build的LAN下连接有“设备”。 这些设备创build一个完整的Web服务器,在Linux下运行,并使用nodejs作为后端实现语言。 他们也可以通过路由器的公共IP访问互联网。 另一方面,有客户可以select连接到哪个设备。 目标是将客户端与任何设备创build的WebServer连接起来。 到目前为止,我的想法是尝试实现类似于TeamViewer的工作方式。 据我所知,Teamviewer有一个代理连接的中央服务器。 当一个代理连接到中央服务器时,这个代理获得TCP连接,保持活动状态。 当另一个客户端要访问第一个客户端时,服务器绕过两个TCP连接。 这样服务器的行为就像一个代理服务器,在那里它另外路由TCP连接。 这也允许连接到局域网或防火墙下的客户端(因为连接始终是从客户端创build的)。 如果这是正确的,我想实现的是一个中央服务器,同样在nodejs中,它pipe理来自不同活动设备的套接字连接池,当客户端想要连接到一个特定设备时,服务器绕过客户端的传入TCP连接与设备的已经存在的连接。 我首先想知道的是,如果这是可能的nodejs。 我的想法是保持设备连接活着,以便客户端可以立即连接到它们,创build某种types的设备连接池。 如果在C中实现,我想我可以得到套接字描述符,保持活动,并绕过传入的客户端请求。 但在nodejs中,我似乎无法find任何pipe理TCP连接的模块。 是否有任何高水平的npm包做这个function? 否则,是否可以使用具有这些function的较低级别的模块(如networking)。 理想情况下,我想用高级模块(express)来实现它,但是如果不可能的话,我总是可以使用低级模块重写服务器。 提前致谢

NodeJS与Websocket混合使用TCP套接字

我有一个NodeJS TCP套接字服务器正在运行,我想添加对websockets的支持。 有没有人试图在一台服务器中混合两个 看来你可以创buildHTTP服务器,实现websocket升级握手,然后把套接字交给TCP套接字服务器。 这是正确的做法吗? 我考虑使用socket.io,但似乎会切断TCP套接字。

Java – > TCP – > node.js(string数据传输)

客户端(Java) Socket tcpClient = new Socket("localhost", 6000); String msg ="test"; DataOutputStream os = new DataOutputStream(tcpClient.getOutputStream()); PrintWriter pw = new PrintWriter(os); pw.println(msg); pw.flush(); 服务器(node.js JavaScript) var net = require('net'); var server = net.createServer(function (c) { //'connection' listener log('Java client connected to this nodeServer'); c.on('data', function (data) { console.log(data); }); c.on('end', function () { console.log('nodeServer disconnected'); }); […]

Cloudfoundry上的非HTTP TCP连接

我是一个白痴的移动开发者,试图利用cloudfoundry的服务来运行我的服务器来处理一些聊天和angular色移动。 我使用Noobhub来实现这个(使用Node.js和Corona SDK的TCP连接API在服务器和客户端之间进行TCP连接) 所以基本上我试图Cloudfoundry(Node.js)和我的机器(lua)之间的非HTTP TCP连接。 链接到Noobhub(有一个github回购与服务器和客户端实施。 我在做 客户 … socket.connect("myappname.cloudfoundry.com", 45234) … (45234来自服务器的process.env.VCAP_APP_PORT值,我从控制台输出中检索到,在运行应用程序之后通过“vmc logs myappname”得到。 服务器 … server.listen(process.env.VCAP_APP_PORT) 当我尝试连接时,它只是超时。 在我的本地机器上,做客户端 … socket.connect("localhost",8989) 服务器 … server.listen(8989) 按预期工作。 它只是在cloudfoundry,它不起作用。 我尝试了很多其他的方法,例如将客户端的端口连接设置为80以及其他一些。 我看到了一些资源,但没有一个能够解决这个问题。 我通常会打电话问问题,所以如果你需要更多的信息,请问我! PS D:<,这是一个问题,显示了另一个人发布的类似问题。 无法连接到CloudFoundry上的TCP服务器(localhost node.js工作正常) 从这里我可以看出,这个人正在尝试做类似的事情。 select的答案是否意味着我必须使用主机头(即使用http协议)来连接? 这是否也意味着cloudfoundry将不会支持“真”TCP套接字,就像heroku或应用雾?

在node.js中的TCP聊天服务器架构…将数据库或内存中的套接字保存?

我正在计划在node.js + mongo数据库的TCP聊天服务器..这是我正在考虑的架构 – 在mongo数据库中创build一个集合“online_users”这个集合将拥有所有的在线用户,一旦用户下线,我将从这个集合中删除这些用户。 创build一个集合“房间”..在这个集合我打算存储房间名称(包括在房间里的用户名csv)和参与者在这个房间.. 用于存储用户的聊天历史的历史集合。 现在我正在考虑在“房间”集合中的数据库存储套接字连接,但我不知道如果我应该这样做,或在arrays中存储套接字连接? 这里是我正在思考的数据库的stream程 – 如果用户A开始与B和C聊天,那么我将创build一个新的房间“A,B,C”。 我将发送这个房间名称给客户端,聊天客户端在发送新的聊天消息时必须通过这个房间名称。 当用户在聊天中发送消息时,我将检查他们在哪个房间,并从数据库获取每个人的套接字连接,并将该消息广播给B和C. 请注意,我是node.js和聊天服务器的新手,所以我对这个体系结构有任何build议。 另外,如果你有TCP聊天服务器架构/聊天服务器数据库架构的任何链接..那么请分享您的意见/答案。 任何帮助,我非常感谢! 更新1:另外我不知道如果我可以在数据库中存储套接字对象:( ..序列化可能工作吗?让我知道这个想法。

netcat不发送最终的FIN来closures连接

我正在玩自制的nodejs tcp服务器,并在Linux下testingnetcat的行为。 在build立连接时,服务器发送“Test”string并closures套接字。 我期望netcat通过发送适当的tcp数据包来closures它的连接,但是它不会! 这是我做的: nc -v localhost 9000 之后,整个谈话看起来像这样: netcat –> server (SYN) netcat <– server (SYN, ACK) netcat –> server (ACK) netcat <– server (PSH, ACK) netcat –> server (ACK) netcat <– server (FIN, ACK) netcat –> server (ACK) 在这一点上,我期望netcat发送FIN,但它永远不会。 连接挂在FIN-WAIT-2的一边,CLOSE-WAIT挂在另一边。 如果我用telnet尝试同样的事情: telnet localhost 9000 它的行为如预期,并收到“testing”string后终止连接。 问题是为什么netcat的行为不同?

在大文件的http传输中间歇性地获取TCP._onclose

我正在使用jQuery的ajax调用将10GB文件传输到我的node.js服务器。 我很高兴,我的第一次testing成功,但在随后的testing中,我正在调用TCP._onclose在中止传输的服务器上。 我试图避免做手动文件I / O来砍文件,因为文件I / O读取正在杀死我的传输速率。 所以,我的问题是双重的: 1)传输一个文件这么大(或者我有一个需要追踪的地方的错误)的TCP._onclose ? 2)如果我必须手动骰子文件发送较小的块,什么是合理的块大小,是否有一个更有效的方法来骰子比使用file.slice(..)然后FileReader.readAsBinaryString(..)并发送阅读器onload函数上的数据? 这是我目前的客户端代码: $( "#streamUploadButton" ).click( function() { lastPlace = 0; startTime = lastTime = Date.now(); $.ajax( { xhr: function() { var xhr = new XMLHttpRequest(); xhr.upload.addEventListener( "progress", function( evt ) { if ( evt.lengthComputable ) { var place = evt.loaded; var percentComplete = place / […]

有时出现乱码的结果通过TCP套接字从python发送base64编码图像到node.js

我试图通过程序在python中生成图像以发送到node.js实例,然后我可以通过websocket实时将这些图像发送到浏览器。 我的第一个testing迭代只是在我的node.js服务器中打开一个jpeg文件,将其编码为base64,并使用socket.io(端口81)将其发送到浏览器。 每次发送数据都能正常工作。 然后,我尝试在python中打开相同的文件,连接到一个原始的TCP node.js服务器(在端口9090上),并将文件发送到节点服务器,以便转发给浏览器(在端口81上)。 大约一半的时间,数据节点接收似乎被破坏,但数据python从文件读取每次都罚款。 令我惊讶的是,节点和浏览器之间的数据通道是好的,但是Python和节点之间的数据通道却不是。 websockets是否提供了一些在原始TCP套接字中不存在的纠错? 如果不是,可能会导致这个错误? 谢谢。 JS代码 var io = require('socket.io').listen(81); var fs = require('fs'); var path = require('path'); var net = require('net'); var mousex = 0; var mousey = 0; var imgdata = ""; var oldimgdata = ""; var imagehaschanged = true; //Serving python var server = net.createServer(function (stream) { […]

在NodeJS的TCP服务器上实现简单的身份validation

我几乎可以肯定,我不明白TCP服务器的基本概念,我不把数据视为stream,更糟糕的是,我可能不会很好地使用这些事件。 我想让tcp服务器写入套接字“username:”,这样你就可以input你的用户名(在像netcat或telnet这样的tcp客户端上),然后tcp服务器必须把下一个数据作为用户名。 到目前为止它确实有效(尽pipe我几乎可以肯定有更好的方法可以做到这一点),接下来它应该写上“password:”,这样你可以input你的密码,如果是正确的,那么应该validation证书和做更多的东西…但是会发生什么,当你input密码,它再次写入“密码:”,因为socket.write('password: '); socket.on('data',function(){//etc}); 这是我迄今为止的代码: var net = require('net'); var server = net.createServer(function (socket) { socket.addListener("connect", function () { socket.write('username: '); socket.on('data',function(data){ var username = data.toString().replace('\n',''); socket.write('password: '); socket.on('data',function(data){ var password = data.toString().replace('\n',''); // verify authentication here // Do more stuff }); }); }); }); server.listen('8000','localhost'); 什么是正确的方法来实现这个? 我只是实现这一点,因为我需要接收上传(stream)可能没有结束,并不是一次全部来。 我真的很愚蠢,试图解决这个问题与TCP服务器? 提前致谢。