即使连接处于活动状态,也不会发送TCP响应的原因。 (即我们能够通过相同的连接同时接收TCP流)
使用Twisted(Python)
设置TCP连接总结您的系统。
我们的应用程序(比方说B)通过TCP连接到应用程序A.
B也通过IPC(I。)在0MQ上连接到C(单独的服务) 相信它是一个Unix套接字)
C通过TCP连接到PostgresSQL(通过SSL)
正常消息流看起来像这样
A --TCP--> B -- IPC(0MQ) --> C (C query DML over TCP to Postgres)
|
|
A <--TCP-- B <-- IPC(0MQ) <-- C (DML Result)
现在,有一段时间(随机发生)对TCP服务器的响应(即从B到A)没有被发送。
我们使用以下ngrep
确认了上述内容(其中x.x.x.x是IP或TCP服务器)
ngrep -d eno1 -pqtW byline net x.x.x.x
但是我们的日志有条目表示发送的响应(来自B)(在我们通过TCP 写入响应之后写入)到A。
def send_tcp_response_to_sms800(self,response):
self.log.info("Sending TCP response for message id {message_id}",message_id=response[0])
message = self.create_message(response)
ber_enc_message = ber_encoder.encode(message)
self.transport.write(b'\x7e\x7e\x7e\x7e')
self.transport.write(struct.pack('>I', len(ber_enc_message)))
self.transport.write(ber_enc_message) ## <-- response written to TCP
self.log.info("response sent to sms800 from {qs}",qs=self.queue_server_name)
timestamp = strftime("%a, %d %b %Y %H:%M:%S")
self.log_message_id_in_response(response[0],timestamp) ## <-- ## log file where message id from the response is logged
为了安全,这与内存无关
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30933
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我已经不知道这可能是什么原因。
注意:我们已经彻底检查,B到C之间的通信在这里不是问题。我们交叉检查B和C应用程序的日志,并在B和C之间找到一对匹配的请求/响应。