Articles of tcp

如何通过node.js构build通过TCP发送的消息?

我需要从一个node.js TCP服务器发送一个JSONstring到多个TCP客户端。 为了从客户端的套接字/stream读取消息,我需要做一些消息框架。 一种方法是将消息的长度作为数组前缀,然后将其转换为客户端消息的缓冲区大小。 我怎么会在服务器上的node.js / javascript中做这样的事情,然后在客户端使用.NET客户端读出来? 鉴于这个客户端代码,我将如何在服务器端使用JavaScript /节点正确构造消息? TcpClient client = new TcpClient(server, port); var netStream = client.GetStream(); // read the length of the message from the first 4 bytes byte[] b = new byte[4]; netStream.Read(b, 0, b.Length); int messageLength = BitConverter.ToInt32(b, 0); // knowing the length, read the rest of the message byte[] […]

节点脚本 – 从一台服务器故障切换到另一台服务器

我有一个nodejs脚本 – 在server1上称它为“process1”,同样的脚本在server2上运行 – “process2”(只是flag = false)。 Process1将执行预处理动作,并在开始时处于“运行”状态。 process2将会运行,但处于“block”状态,并在其中设置了标志。 我想要实现的是为此过程实现故障转移/回退。 如果process1下降,process2上的标志将会改变,而process2将接pipeprocess1中的所有任务(当process1回来时,反之亦然 – fallback)。 什么是最好的方法来做到这一点? 那些TCP连接? 注:即使它没有太多的相关性,但我想提一下,这些进程将在内部工作,与第三台服务器build立TCP连接,并parsing我们从该服务器获得的数据。 两个进程都将在两台服务器上运行,但是当时只有一个进程可以提供服务 – 运行时标志为true(而不是两者都有) 更新:根据以下讨论和内部研究/testing和解决scheme的监测, 使用反向代理将为您节省大量的时间 。 仅基于2台服务器的编程故障转移将覆盖70%与两台机器上使用的内部进程相关的情况 – 但是由于存在问题,您将无法检测到其他30%的问题networking(特别是如果你有大量的数据接收器的stream量)。

Node.jsnetworking库:从“数据”事件获取完整的数据

我四处搜寻,要么找不到确切的问题,要么我需要有人向我解释,就像我5。 基本上,我有一个使用networking库的Node.js脚本。 我连接到多个主机,并发送命令,并侦听返回数据。 var net = require('net'); var nodes = [ 'HOST1,192.168.179.8', 'HOST2,192.168.179.9', 'HOST3,192.168.179.10', 'HOST4,192.168.179.11' ]; function connectToServer(tid, ip) { var conn = net.createConnection(23, ip); conn.on('connect', function() { conn.write (login_string); // login string hidden in pretend variable }); conn.on('data', function(data) { var read = data.toString(); if (read.match(/Login Successful/)) { console.log ("Connected to " + ip); […]

NodeJS:什么是处理TCP套接字stream的正确方法? 我应该使用哪个分隔符?

根据我在这里所理解的,“V8有一个世代垃圾收集器,随机移动对象,节点不能得到一个指向原始string数据的指针来写入套接字。 所以我不应该将来自TCPstream的数据存储在string中,特别是如果该string变得比Math.pow(2,16)字节更大。 (希望我到现在为止..) 那么什么是处理来自TCP套接字的所有数据的最佳方式? 到目前为止,我一直试图使用_:_:_作为分隔符,因为我认为它是某种独特的,不会混淆其他的东西。 数据的一个样本将会是something_:_:_maybe a large text_:_:_ maybe tons of lines_:_:_more and more data 这是我试图做的: net = require('net'); var server = net.createServer(function (socket) { socket.on('connect',function() { console.log('someone connected'); buf = new Buffer(Math.pow(2,16)); //new buffer with size 2^16 socket.on('data',function(data) { if (data.toString().search('_:_:_') === -1) { // If there's no separator in the data that […]

nodejs – 为什么Node.js可以处理大量的simulteneous持久连接?

我知道Node.js擅长保持大量的同步持续连接,例如,许多聊天室的聊天室。 我想知道如何实现这一点。 我的意思是无论如何它使用TCP / IP封装的底层操作系统,为什么它可以处理永久连接,以至于其他人不能? 它有什么神奇的东西?

为什么NodeJS KeepAlive似乎没有按预期工作?

从TCP keepalive引用HowTo : 为了了解什么是TCP keepalive(我们将其称为keepalive),您只需要读取名称即可:keep TCP alive。 这意味着您将能够检查连接的套接字(也称为TCP套接字),并确定连接是否仍在运行或者是否已损坏 。 那么为什么下面的代码不会在互联网连接断开的时候抛出一些东西 ? var tls = require('tls'); var socket = tls.connect(443, "google.com", function connected() { console.log('connected'); }); socket.setNoDelay(true); socket.setKeepAlive(true, 0); socket.setTimeout(0, function(){ console.log('timeout'); }); socket.on('data', function(data) { console.log(data); }); socket.on('close', function() { console.error("close"); }); socket.on('error', function(err) { console.error("error", err); }); 使用NodeJS v0.10.17在MacOS / Debian上进行testing

如何在使用node.js时将数据发送到指定的连接

我正在使用node.js构build一个TCP服务器,就像doc中的例子。 服务器build立持久连接并处理客户端请求。 但是我也需要发送数据到任何指定的连接,这意味着这个动作不是由客户端驱动的。 怎么做?

使用从chrome到node-http2服务器的HTTP / 2时,请参阅多个TCP连接

更新(对于任何对结果感兴趣的人:) 我无法弄清为什么chrome和node-http2服务器之间的下一个协议协商失败。 我的怀疑是自签名证书或ALPN / NPN支持问题。 所以我搬到了golang HTTP / 2的实现 。 相同的设置完美地工作,我看到单个多路复用的TCP连接(铬 – > golang) 我一直在阅读关于HTTP / 2的知识,以及它如何通过每个主机的单个多路复用TCP连接来解决HTTP / 1.1的延迟问题,所以我决定尝试一下。 本实验 创build一个简单的HTML文件,引用一个CSS,一个JS和几个图像。 Node.js中的一个简单的http服务器,它提供所有这些文件 使用chrome发出http请求 在Ubuntu上使用tcptrack( tcptrack )来跟踪到http服务器的TCP连接。 tptrack窗口显示build立了4个连接。 所以浏览器打开不同的连接图像和CSS / JS请求。 我使用tcpdump获得类似的输出。 供参考使用的tcptrack命令是 tcptrack -d -i eth0 -r 3600端口8989 而tcpdump也显示类似的输出 tcpdump -i eth0 -nns 0“dst port 8989 and tcp [tcpflags] == tcp-syn” 服务这些文件的简单的一台http服务器就像下面这样(相关的代码) (function(){ ……….. var […]

Node.js HTTP / NET – 连接和请求之间的区别

这个问题涉及到tcp / ip协议的一般概念,对此已经有了很好的答案,但是我希望能够深入了解一下node.js http / net库的特性。 节点http服务器实例允许为两种types的事件,“请求”事件和“连接”事件注册callback。 后者是从networking库inheritance而来的,同时还有一个字段“_connections”,用于统计服务器当前拥有的并发连接数。 现在,在我看来,由于http是一个无状态协议,所以请求和连接事件之间应该有一个1-1的对应关系,但事实并非如此。 当我在debugging器中通过一个简单的“hello-world”服务器时,发现请求事件的数量超过了连接事件的数量。 我还看到,即使没有对服务器进行调用(并且进程没有暂停),.connections字段也不会被清零。 为什么请求数量不等于连接数量,为什么服务器在最后一次调用response.end()(响应缓冲区应该被刷新并且连接结束?)之后保持连接打开状态? 另外,一个http服务器的并发连接数量(对keep-alive没有任何影响)如何高于1? 不要求基本上在sockets上排队,并逐个处理? 我明白Node是asynchronous的,但我也认为它是以单线程方式运行的。 提前致谢!

node.js的“net”包中的socket.write函数没有写入套接字

我在使用node.js的net包编写2个消息到TCP套接字时遇到了一些麻烦。 代码: var net = require('net'); var HOST = '20.100.2.62'; var PORT = '5555'; var socket = new net.Socket(); socket.connect (PORT, HOST, function() { console.log('CONNECTED TO: ' + HOST + ':' + PORT); // Write a message to the socket as soon as the client is connected, the server will receive it as message from […]