Tag: tcp

在Node.js TCP套接字中testingKeepalive的function

我一直在testingNode.js TCP套接字中keepalive的function。 看来我在这里错过了一些东西! 这是我的服务器代码: var net = require('net'); function accept(socket) { socket.setKeepAlive(false); socket.on('data', function(data) { console.log("DATA"); console.log(data); }); socket.on('error', function (e) { console.log("ERROR"); console.log(e); }); socket.on('close', function () { console.log("CLOSE"); }); socket.on('end', function () { console.log("END"); }); socket.write("Hi"); } var server = net.createServer(accept); server.listen(8011); 这是我的客户代码: var net = require('net'); var socket = new net.Socket(); socket.setKeepAlive(false); […]

Node.js用于评估和打印数据的TCP服务器

我尝试创build简单的TCP服务器,评估和打印结果,但它没有工作,这里是我的代码: var net = require('net'); var server = net.createServer(function(socket) { socket.on('data', function(data) { socket.write('result: '); socket.end(eval(data)); }); }); server.listen(8080); 当我连接到端口8080我得到这个: $ echo 10+10 | nc localhost 8080 result: 10+10 为什么eval不起作用?

当对socket.send()进行快速调用时,websocket客户端间歇性地无法传输。

我有一个websocket服务器和客户端。 我可以build立连接并在两个方向上传输消息(数据)。 但是,当运行在Web浏览器中的客户端快速调用socket.send()时,服务器不会收到一些消息。 如果我减慢客户端调用socket.send()所有消息都由服务器接收。 为什么调用socket.send()的时间与间歇性丢弃消息有什么关系? 在Win7,Android和iOs上运行Chrome,FireFox和Safari时会出现这种情况。 所以我不认为这是一个浏览器的错误。 服务器是nodejs,但这是不相关的,因为服务器不是问题。 通过快速调用,我的意思是在由requireAnimationFrame()控制的循环中进行调用。 消息中的数据量很小,每个大约有40个字节。 有<10条消息,即连续调用socket.send()。 因此我不知道如何溢出一个TCP缓冲区。 但是也许? websocket处于“arrays缓冲”模式。 socket.bufferedAmount === 0每次发送前后,无论消息是否被客户端丢弃。 丢弃消息后,套接字继续在两个方向上发送消息。 例如,客户端将对socket.send()进行10次调用,服务器将看到除3和7之外的所有消息,而客户端将看到服务器发送的所有消息。 在调用socket.send()之前,我已经validation了数据的完整性。 客户端代码调用var tmpArrayBuffer = new ArrayBuffer(n)在每次调用socket.send(tmpArrayBuffer)之前创build一个新的缓冲区。 所以我不认为我的客户端代码覆盖自己的缓冲区。 从来没有一个错误的消息的情况。 消息要么完好无损,要么完全没有到达。 大多数消息到达。 我的老C程序员认为这是一个写过缓冲区的情况。 但我不明白这是如何在JavaScript中可能的,并给予socket.send()应该是我的责任的数据的结束。 我正在尝试使用MS消息分析器嗅探客户端和服务器之间的TCP通信。 然而,这是一个挑战,因为浏览器异或与websocket键意味着我必须手工解密每个消息。 慢,不好玩。 任何人有更好的主意? 我的代码是一个大型项目的一部分,这个项目太大,太复杂了。 我正在研究一个可能有助于debugging问题的小testing存根。 如果/当我得到它的工作,我会张贴存根(stub)。 在任何情况下,当调用socket.send()的时间间隔较长时,较大的项目“工作”,因此我不认为这是项目中其他代码的问题。 我认为这是我的理解如何使用websockets和/或TCP的问题。 另一个线程提示反病毒软件(stackoverflow问题21191620)。 我试过禁用我的防病毒软件。 没有效果。 此外,Android手机和iTouch上的问题是相同的,它们并不运行防病毒软件。 这是多年来我第一次无法通过诸如计算器(stackoverflow)之类的网站在网上进行研究来解决问题。 我已经search了这个问题,直到我的手指麻木。 于是我终于在这里创build了一个帐户并发布了一个问题。 请帮忙!

NodeJS:TCP套接字服务器只是第一次返回数据

我正在尝试在node.js中编写一个小的中继脚本,用于侦听本地套接字上的传入TCP连接,当它获取一个时,将stream量转发给第三方。 它还必须从该第三方获取任何返回的数据并将其发送回原始的本地套接字。 我已经尝试了像http://delog.wordpress.com/2011/07/19/a-tcp-relay-mechanism-with-node-js/这样的代码,它确实工作,但它要求发件人是一个服务器正在监听一个套接字本身,而我的工具是用来处理任何试图创build一个出站TCP连接的程序。 不幸的是,我遇到的问题是,当客户端首次将数据发送到“路由器”程序,路由器将其转发到另一台服务器,然后从客户端返回数据时,一切都很好。 但是,当客户端程序结束或终止并尝试重新连接,我得到这个: events.js:72 throw er; // Unhandled 'error' event ^ Error: This socket has been ended by the other party at Socket.writeAfterFIN [as write] (net.js:275:12) at Socket.<anonymous> (/root/tcp_loop.js:37:17) at Socket.emit (events.js:117:20) at Socket.<anonymous> (_stream_readable.js:748:14) at Socket.emit (events.js:92:17) at emitReadable_ (_stream_readable.js:410:10) at emitReadable (_stream_readable.js:406:5) at readableAddChunk (_stream_readable.js:168:9) at Socket.Readable.push (_stream_readable.js:130:10) at TCP.onread (net.js:528:21) […]

node.js服务器限制新的连接

我正在使用node.js创build一个服务器,用于向客户端发送服务器发送的事件。 我在Windows 7机器上运行服务器。 我连接的方式是使用apache httpclient发送HTTP get请求,build立TCP连接并从服务器接收事件。 我注意到,在我连接11个客户端的同时,以前的连接closures。 Node.js有没有限制? 还是这个系统特有? 我一直在这个谷歌search,我什么都找不到。 以下是我要发送的请求中的示例代码: HttpClient httpClient = HttpClientBuilder.create().build(); String domain = "…"; HttpUriRequest httpGet = new HttpGet(domain); String encoding = "…" httpGet.setHeader(new BasicHeader("Authorization", "Basic " + encoding)); httpGet.setHeader(new BasicHeader("Content-Type", "text/event-stream")); HttpResponse resp = httpClient.execute(httpGet); HttpEntity entity = resp.getEntity(); if (resp.getStatusLine().getStatusCode() != 200){ String responseString = EntityUtils.toString(entity, "UTF-8"); System.out.println(responseString); […]

Socket TCP连接在不同的服务器上

我想知道是否可以在服务器之间使用TCP协议创build套接字连接。 例如:我有两个服务器,一个是API,另一个是服务,所以API调用服务,如果不在同一台机器,我怎么能发送消息? 我使用ZeroMQ ,我绝对需要这种分离。 其他import件是安全的。 TCP套接字连接是否安全? 谢谢。

如何绑定一个TCP套接字而不侦听nodejs?

我想在应用程序期间预留一个端口,但应用程序不应该一直在端口上进行监听。 因此,我想从listen()调用中分离bind() listen()调用。 nodejs中的UDP / Datagram套接字具有bindfunction。 但是我在“普通”(TCP)套接字API中找不到它的等价物。 是否可以绑定而不听?

你如何让多个node.js命令行进程相互交谈?

我正在搞乱https://github.com/nodejitsu/forever ,并且一般都想知道如何以及如何将消息从一个命令行进程发送到另一个命令行进程。 在Web上,您使用HTTP来回发送请求。 但是我从来没有用命令行来做过这种事情。 我知道它可能与端口和套接字,但不知道从哪里开始… 这里是基本的设置: 你有一个mainProcess.js和childProcess.js ,它们是独立于命令行调用的。 不知何故,每当childProcess.js发送消息时, mainProcess.js必须运行callback。 ./parent.js : var forever = require("forever"); var mainProcess = forever.start(["node", "mainProcess.js"], {max: 1, silent: true}); mainProcess.on("stdout", function(data) { console.log(data.toString().trim()); }); mainProcess.on("stderr", function(data) { console.log(data.toString().trim()); }); forever.startServer(mainProcess); ./child.js : var forever = require("forever"); var childProcess = forever.start(["node", "childProcess.js"], {max: 1, silent: true}); childProcess.on("stdout", function(data) { // […]

无法正确连接到Kubernetes中的Redis

在我的macOS上(不使用Minikube),我已经在这个例子之后对我的Kubernetes集群进行了build模,这意味着我已经按照这个顺序执行了这个逐字logging: # Adding my own service to redix-proxy kubectl create -f ./redis/redis-service.yaml # Create a bootstrap master kubectl create -f examples/storage/redis/redis-master.yaml # Create a service to track the sentinels kubectl create -f examples/storage/redis/redis-sentinel-service.yaml # Create a replication controller for redis servers kubectl create -f examples/storage/redis/redis-controller.yaml # Create a replication controller for redis sentinels kubectl create […]

我怎么知道,Stream使用的是什么本地端口?

是否可以明确指定net.Stream应该使用的本地端口,还是找出本地端口用于连接? 根据文档,本地端口不能被指定: stream.connect(port, host='127.0.0.1')